Appel de fonctions dans une dll

Signaler
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005
-
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
-
Bonjour,

j'ai un pb un peu bizarre.
j'ai créer des fonctions dans une dll.
j'utilise __declspec(dllexport) pour dire qu'il faut exporter ces fonctions.
Ex dans mon .h : __declspec(dllexport) int maFonc( char *);

el le .cpp :
int maFonc( char * chaine )
{ .............}

Quand j'apelle cette fonction sous FoxPro, NO PROBLEMO, que ce soit en debug ou Run.

Par contre en VB, je suis obliger de créer l'éxécutable utilisant la dll et de le lancer pour ke ca fonctionne correctement. Sinon kan j'exécute mon prog VB en pas a pas, j'ai l'erreur suivante :
"Convention d'appel de la dll incorecte '49'"

On m'a donc dis d'utiliser _stdcall
Mais avec _stdcall je n'arrivais plus a exporter mes fonctions, car maintenant mes programmes ne 'voient' plus les fonctions exportées par la dll.
Alors j'ai ajouté un .def dans lequel je mets juste le nom des fonctions ke je souhaite exporter.
ET LA CA MARCHE !

Mais maintenant j'ai remarquer que __declspec(dllexport) ne me servait plus a rien car ca marche même kan je ne le mets po !

Mes questions :
Pourkoi __declspec(dllexport) n'exporte plus a partir du moment ou j'ai ajouté _stdcall ? Est-ce normal ou bien est-ce ke je fais kelke choz de mal?

Peut on me dire s'il est préférable d'utiliser __declspec(dllexport) pour exporter ou bien utiliser un .def ?

Merci beaucoup parce ke la, tout se mélange pour moi :o(

3 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Serait long a expliquer mais en tous cas ne te sert pas de __declspec(dllexport) et prefere toujours __stdcall et le .def pour exporter. Pas de decoration des noms donc accessible par tout autre langage.
BruNews, ciao...
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005

OK merci beaucoup
réponse simple et efficace.
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Pour infos pour éviter les decorations:
#ifdef __cplusplus
extern "C" {
#endif
...
// code
...
#ifdef __cplusplus
}
#endif

Core Breaker :)