Définition du point d'entrée sur une DLL C++

Feanor06 Messages postés 34 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 23 juillet 2010 - 15 avril 2010 à 09:19
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 15 avril 2010 à 10:58
Bonjour,

J'apppelle une fonction d'une DLL C++ écrite avec Dev-C++ sous Visual Basic 2008 (vb.net).

J'utilise une déclaration du type :
extern "C" __declspec (dllexport) __stdcall Machin MaFonction()

Et dans l'exe :
Declare Function MaFonction Lib "DLL.dll" () As Machin

Aucun problème, tout fonctionne parfaitement.

Par contre, je dois changer de compilateur C++ et passer sous CodeBlocks (pas le choix...).

Et la, c'est le drame... plus rien ne fonctionne...
Le point d'entrée de ma fonction n'est pas identifié (EntryPointNotFoundException).

J'ai pensé linker le .a au projet, bien qu'il me semble que le Declare Function remplace ce "linkage", mais je ne voit même pas comment faire (pas d'ajout de fichier .a ni .def dans VB 2008).

J'ai également modifié ma déclaration comme ceci pour définir un point d'entrée... mais rien n'y fait :
<DllImport("DLL.dll", EntryPoint:="DLLIMPORT1")> _
Private Shared Function MaFonction() As Machin
End Function

Quelqu'un a t'il une idée sur le problème ???

Merci beaucoup !

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2010 à 09:41
a voir déjà ce quie est exporté par ta dll new look

utilises le dependancy walker (depends.exe) pour lister les fonctions...
le nom décoré y est peut etre pour quelque chose

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Feanor06 Messages postés 34 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 23 juillet 2010
15 avril 2010 à 10:00
Ok, merci Renfield, je ne connaissais pas le dependancy walker.

Par contre il ne liste aucune de mes Dll, n'est ce pas seulement une analyse des Dll windows lié au projet ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2010 à 10:02
tout dépend du fichier que tu charges...
il ne faut pas y charger l'executable de ton projet, mais bien la dll

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Feanor06 Messages postés 34 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 23 juillet 2010
15 avril 2010 à 10:30
Ok !

C'est donc ce que je viens de faire, aucun problème identifié.
Les 2, celle de Dev-C++ et celle de CodeBlocks sont identiques.

Mais apparement pas pour VB...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2010 à 10:33
si les noms exportés sont identiques....

c'est étrange.

tu es bien toujours en stdcall ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Feanor06 Messages postés 34 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 23 juillet 2010
15 avril 2010 à 10:47
Oui, toujours...

Le plus fou c'est que CodeBlocks prends en compte l'export des projets Dev-C++.
C'est donc ce que je fais, pas de modif de code, je compile en Release, j'ai vérifié chaque option de compilation...

Et bam : EntryPointNotFoundException

Petite différence de taille tout de même :
DLL Dev-C++ : 16ko
DLL CodeBlocks : 7ko

Dev-C++ embarque t'il des infos précieuses au projet et pas CodeBlocks...???
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 avril 2010 à 10:58
16 K, c'est trop gros, surement des liens avec la runtime VC...

la taille ca veux pas dire grand chose ...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Rejoignez-nous