cs_sandy27
Messages postés20Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention 6 août 2008
-
5 août 2008 à 16:31
cs_sandy27
Messages postés20Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention 6 août 2008
-
6 août 2008 à 09:19
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 ?
SebLinck
Messages postés212Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention23 juin 2011 5 août 2008 à 16:55
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.
cs_sandy27
Messages postés20Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention 6 août 2008 5 août 2008 à 17:10
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"
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 5 août 2008 à 18:05
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..
cs_sandy27
Messages postés20Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention 6 août 2008 5 août 2008 à 19:10
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
Vous n’avez pas trouvé la réponse que vous recherchez ?