georgeduke
Messages postés167Date d'inscriptiondimanche 6 février 2005StatutMembreDernière intervention13 avril 2007
-
8 août 2005 à 11:03
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
8 août 2005 à 16:30
Bonjour,
Je n'arrive pas à utiliser les fonctions d'une dll "étrangère" ; cette
dll s'appelle rw_data.dll, je n'ai que ce fichier : donc pas de *.lib
ou de *.def
Le LoadLibrary fonctionne, mais je n'arrive pas à accéder à la fonction qui m'intéresse...ImpFuncDLL est toujours null :-(
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 août 2005 à 12:58
D'après la description, l'export ne me parait ni "C" ni __stdcall mais C++ standard, surement pour cela que le compilo ne trouve pas la fonction car son nom est "décoré". Teste en compilant C++ et fais un header h sans extern "C".
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 8 août 2005 à 14:08
J'ai pu voir sur le site du gars, qu'il y a son mail d'indiqué au cas de problème de l'utilisation de la DLL.
Tu peux toujours essayé de lui en envoyé un.
georgeduke
Messages postés167Date d'inscriptiondimanche 6 février 2005StatutMembreDernière intervention13 avril 2007 8 août 2005 à 14:10
Oui ça fonctionne !! Merciiiiiii !! Le logiciel que tu m'as indiqué est
impressionnant !! Le nom de la fonction est bien décoré ; en fait elle
s'appelle _dtaCreate@4 ! Maintenant je vais pouvoir essayer de
l'utiliser :-)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 août 2005 à 14:25
Attention depends.exe peut donner les 2 vues sur les exports, décoré ou non.
[mailto:_dtaCreate@4 _dtaCreate@4] s'il est lu ainsi en vue déco alors c'est que la fonction est bien exportée en extern "C" car ici il n'y a aucune déco du nom, c'est le pur standard __stdcall, un compilo C doit pouvoir trouver le point d'entrée sans problème et GetProcAddress() idem avec "dtaCreate". Le 4 final indique seulement le nombre d'octets empilé en paramètre, donc ici 1 seul param car chaque param empile 4 octets sur system 32 bits.
georgeduke
Messages postés167Date d'inscriptiondimanche 6 février 2005StatutMembreDernière intervention13 avril 2007 8 août 2005 à 15:13
Oui depends.exe donne les deux vues, mais meme si je passe de la vue
décorée à la vue non décorée le nom de la fonction reste _dtaCreate@4.
Le problème est lié au fait que je compile en c++ ? Est-ce pour ça que
le compilo ne trouve pas "dtaCreate" tout court ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 août 2005 à 15:20
certainement mais comme indiqué plus haut, tu peux rester en compilation C++ si tu mets extern "C" devant les dééclaratins de fonctions dans le fichier h.
Ton fichier h à remplir sur ce modèle:
#ifndef MALIB_H
#define MALIB_H
#ifdef __cplusplus
extern "C" {
#endif
int __stdcall mafunc1(unsigned char *dest);
int __stdcall mafunc2(unsigned int *srcLen, const unsigned char *source);
#ifdef __cplusplus
}
#endif
#endif /* MALIB_H */
Bien sur tu vires les __stdcall si ce n'est pas le cas.