begin process at 2012 05 30 10:31:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Autre

 > 

Utilisation d'une Dll


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utilisation d'une Dll

mardi 5 août 2008 à 16:31:42 | Utilisation d'une Dll

sandy27

Bonjour,

Je vais essayer d'être claire et aussi brève que possible. J'ai réçu d'un fournisseur un code C sous forme de Dll, contenant:
- un .lib
- un .dll
- un .h contenant la déclaration de la fonction principale à utiliser, sous la forme:
   extern __declspec(dllexport) void step_FLUID_NETWORK( double VAR1, int *Var2,
                                                                                                               double *Var3 ) ;
Cette Dll, j'ai réussi à l'uliser en faisant un #include du .h dans mon source .c, en appelant la fonction telle que définie dans le .h, et en compilant avec le .lib rajouté dans les liens. Tout marche miraculeusement et merveilleusement bien.

Maintenant, place à mon problème: j'essaie de créer une Dll que j'utiliserais de la même manière. J'ai déclaré ma fonction principale avec "extern __declspec(dllexport)" aussi bien dans le code de ma Dll que dans le code source utilisateur. Ca doit à peu près marcher car j'ai vérifié que mon code utilisateur entrait bien dans la fonction de la Dll. Rajoutez à cela des variables globales définies dans un .h dans lequel je définis les entrées/sorties du modèle, et auxquelles j'assigne des valeurs dans le code utilisateur. Dans ma Dll, les variables globales sont déclarées sous la forme "__declspec(dllexport) int var1" par exemple. Dans mon code utilisateur, si j'utilise "__declspec(dllimport) int var1" comme j'avais cru comprendre qu'il il fallait le faire, je me fais jeter à la compilation (pbm sur _imp__var1 ?!). Si j'utilise "__declspec(dllexport) int var1" je ne me fait pas jeter, mais lorsque le code utilisateur entre dans la fonction Dll, var1 n'a pas pris la valeur que je lui ai assigné. Est-ce que quelqu'un a une vague idée de la manière de procéder ? pourquoi le fait d'utiliser "__declspec(dllexport) " aussi bien dans la dll que dans le programme utilisateur fonctionne sur les fonctions mais pas sur les variables globales ?

merci d'avoir tout lu !
Sandy
mardi 5 août 2008 à 16:55:53 | Re : Utilisation d'une Dll

SebLinck

Salut,
Si tu as inclut le .h et lié le .lib, tu n'as pas besoin de la dll. (cf lib statique / dynamique)
Est-ce que l'éditeur de lien lie correctement ton projet si tu retires la dll ?

Pour ton problème:
Il faut écrire une fonction d'affectation de la valeur de la variable
dans le code de la dll. Le .h n'est qu'une déclaration.

Montre un bout de code, les romans d'info c'est pas mon fort.


Cordialement,
Sébastien.
mardi 5 août 2008 à 17:10:14 | Re : Utilisation d'une Dll

sandy27

oui, je compile correctement sans le .dll, par contre, je pourrai pas exécuter...
sinon, pour le code de la Dll, ça va ressembler à ça :

#include "Data_Dll.h"
#include "prototypes.h"

void Fonction_principale(void)
{
      blablabla...;

      appel à plusieurs autres fonctions;

      ...
      return;
}

le fichier "Data_Dll.h" lui ressemble à ça:
" __declspec(dllexport)  int var1;
  __declspec(dllexport)  int var2;
...
extern __declspec(dllexport)  void Fonction_principale(void);    "

Et côté utilisation, mon code donnerait ça:
#include "Data_Dll.h"

void Fonc_util (void)
{
      var1 = bla;
      var 2 = blabla;
      ...
     Fonction_principale( );  
}

et ça là que ça coince, si je vais voir dans Fonctin_principale, var1 ne vaut pas bla, mais 0 !

Sandy

mardi 5 août 2008 à 18:05:55 | Re : Utilisation d'une Dll

Neo_Fr

Membre Club
Pouquoi ne pas passer tt simplement tes variables a ta fonction de cette facon:
Fonction_principale(var1, var2); ?
Si c'est pour pouvoir modifier var1 et var2 ou tu veux passe alors des pointeurs a ta dll..

Neo_Fr
mardi 5 août 2008 à 19:10:19 | Re : Utilisation d'une Dll

sandy27

et bien parce que j'ai une énorme quantité de variables à traiter... il n'y a pas d'autre solution que les arguments ? ça parait bizarre... j'avais volontairement choisi les variables globales...

Sandy
mardi 5 août 2008 à 20:01:17 | Re : Utilisation d'une Dll

Neo_Fr

Membre Club
Dans ce cas creer une structure et tu passe a ta fonction un pointeur sur ta structure.

Ex:

typedef struct _mystruct
{
    int var1;
    int var2;
}MYSTRUCT, *LPMYSTRUCT;

void Fonction_principale(LPMYSTRUCT lpms)
{
    lpms->var1 = 16;
    lpms->var2 = 4096;
    return;
}

Neo_Fr

mercredi 6 août 2008 à 09:19:18 | Re : Utilisation d'une Dll

sandy27

merci, je vais essayer ça...  (mais je comprend pas en quoi j'avais faux avant !)

Sandy


Cette discussion est classée dans : code, dll, utilisateur, var1, declspec


Répondre à ce message

Sujets en rapport avec ce message

Dll en c++ dans du code C [ par rurouni41 ] bonjour, je dois integrer une DLL codee en C++ dans un programme en c...Donc je voulais savoir s'il y avait moyen(et comment faire) d ouvrir et d'util (MS VCpp) Problème de variables [ par YS1 ] J'ai créé une DLL C+PP que je souhaite utiliser dans un programe VB.La fonction principale de la DLL renvoie un certain nombre de variables, qui sont gestion des exceptions dans Visual C++ 6 [ par devmail ] Bonjour a tous,je suis en cours de developpement d'un programme compose d'un prg principale et de plusieurs dll. J'ai terminer les traitements et souh USER à partir d'un code C [ par iljamila ] Salut !!Je travaille sous linux et j'ai besoin d'écrire un code en C. Dans ce code je dois déterminer le nom de l'utilisateur courant pour pouvoir cha Lien explicite de DLL [ par garslouche ] Bonjour,j'aimerai savoir si quelqu'un sait comment on accède à une variable (et pas à une fonction) en ayant lié explicitement une DLL ? En gros mon c Communications exe / dll [ par Nebula ] Re-bonjour ...J'utilise ce code dans une dll :#define WIN32_LEAN_AND_MEAN#include HWND hApp = NULL;LRESULT CALLBACK Idle - Hook - dll [ par Manson ] Bonjour,voila, j'ai trouve le code d'une dll permettant de savoirdepuis combien de temps le PC est inactif.Mais voila, elle a un probleme, quelque foi Nom d'utilisateur [ par gibozsec ] Je cherche a récupérer le nom de l'utilisateur qui a lancé le programme. J utilise le code suivant avec MS Visual Studio 6.0 et XP home :LPTSTR tampon Utilisation DLL SANS .lib [ par nasedo47 ] J'ai récupéré une DLL sur un site ainsi qu'une page avec les prototypes de toutes les fonctions contenues dans cette DLL.J'aimerais utiliser ces fonct Dll LoadLibrary --> Erreur [ par mortiis ] Bonjour à tous J'ai fait un prog qui devrais utiliser une dll pour faire un test j'ai fait un dll qui me fait afficher un MessageBox.Le problème est q


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales