J'ai une DLL fourni par un tiers (un coréen que j'ai aussi contacté et dont j'attends la réponse)
DLL écrite en Visual C++
Il fournisse des projets Visual C++ complet, cela m'a bien aidé d'ailleurs (même si je comprends pas du tout comment il fait pour inclure les fichiers lib et tout ça)
Evidemment en C++Builder, j'ai du bidouillé les fichier .H pour que cela compile
La 1ère DLL n'exporte que du C non décoré, ça c'est OK, j'ai déjà fait bcp de dev avec
La 2nd DLL exporte du C non décoré et C++ décorées, là j'ai un petit problème
Pour les fonctions C, pas de soucis, j'ai mis extern "C", le linkage passe !
Sauf pour 4 fonctions C++, il n'indique que le nom de la fonction dans le message d'erreur genre
Pour les fonctions C++, je me suis dit, faisons pareil avec extern "C++", effectivement, je vois une différence sur le message d'erreur, il énumère les fonctions avec le prototype complet avec la convention d'appel mais sans le type de retour comme[ILINK32 Erreur] Error: 'MaFonction' externe non rÚsolu, rÚfÚrencÚ depuis ...
J'ai généré le fichier lib depuis la DLL avec implib, il est inclu dans le projet[ILINK32 Erreur] Error: '__stdcall MaFonction(long)' externe non rÚsolu, rÚfÚrencÚ depuis...
j'utilise un douzaine de fonction, seule 4 se montrent pénible
Dependency Walker me donne les noms décorés et j'ai bien la bonne concordance de type !
Exemple pour MaFonction
J'ai donc essayé la méthode de impdef : Using Visual C++ DLLs with C++Builder
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Dans la DLL : ?MaFonction@@YGHPAJ@Z // Dans le .H BOOL __stdcall MaFonction(LONG *p);
Le ? dans le nom de la fonction lui pose problème :
Pas de bol !Error ...e.def(4): Invalid character in .DEF file
Je passe donc à Coff2Omf !
Là, c'est pas mieux, par défaut, il ne génère que quelques fonctions sur une centaine, je joue avec les options, le fichier lib est déjà plus complet mais là aucune fonction n'est lié !
Mais comment utilisé une DLL MSVC++ en C++Builder !
Partager