Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction dans DLL sans .lib

1 réponse
Avatar
Fabien SK
Bonjour,

Je voudrais utiliser la fonction "UnDecorateSymbolName" de
"dbghelp.dll". Je n'ai pas le .lib (je suis avec VC6 au fait), mais j'ai
son prototype:

DWORD WINAPI UnDecorateSymbolName(PCSTR DecoratedName, PSTR
UnDecoratedName, DWORD UndecoratedLength, DWORD Flags);

Je voudrais linker statiquement "dbghelp.dll" à mon programme (donc pas
de "LoadLibrary"), j'ai donc créé un .def:

---- 8< ----

LIBRARY DBGHELP
DESCRIPTION 'DBGHELP'

EXPORTS
[...]
UnDecorateSymbolName
[...]

---- 8< ----

..ce qui m'a permis d'avoir le .lib: LIB /MACHINE:i386 /DEF:dbghelp.def

Le problème est que maintenant le link ne marche pas dans mon programme
car si je spécifie "WINAPI" dans le prototype, il cherche le symbole
"_UnDecorateSymbolName@16". Si je ne le spécifié pas, ça linke mais
l'exécution plante car la convention d'appelle est mauvaise. Sinon, si
je fais un "reinterpret_cast" de "UnDecorateSymbolName" avec la bonne
convention d'appel ça marche.

Ma question est donc: comment spécifier dans le prototype de ma fonction
"WINAPI" sans qu'il cherche le symbole "_UnDecorateSymbolName@16",
mais plutot le symbole "_UnDecorateSymbolName" ?

Merci de votre attention

1 réponse

Avatar
Alexandre
tu n'as pas avec VC un outil permettant de recréer le .lib (genre implib) ?

"Fabien SK" <fabsk+ a écrit dans le message de
news:3f79361d$0$20176$
Bonjour,

Je voudrais utiliser la fonction "UnDecorateSymbolName" de
"dbghelp.dll". Je n'ai pas le .lib (je suis avec VC6 au fait), mais j'ai
son prototype:

DWORD WINAPI UnDecorateSymbolName(PCSTR DecoratedName, PSTR
UnDecoratedName, DWORD UndecoratedLength, DWORD Flags);

Je voudrais linker statiquement "dbghelp.dll" à mon programme (donc pas
de "LoadLibrary"), j'ai donc créé un .def:

---- 8< ----

LIBRARY DBGHELP
DESCRIPTION 'DBGHELP'

EXPORTS
[...]
UnDecorateSymbolName
[...]

---- 8< ----

..ce qui m'a permis d'avoir le .lib: LIB /MACHINE:i386 /DEF:dbghelp.def

Le problème est que maintenant le link ne marche pas dans mon programme
car si je spécifie "WINAPI" dans le prototype, il cherche le symbole
"". Si je ne le spécifié pas, ça linke mais
l'exécution plante car la convention d'appelle est mauvaise. Sinon, si
je fais un "reinterpret_cast" de "UnDecorateSymbolName" avec la bonne
convention d'appel ça marche.

Ma question est donc: comment spécifier dans le prototype de ma fonction
"WINAPI" sans qu'il cherche le symbole "",
mais plutot le symbole "_UnDecorateSymbolName" ?

Merci de votre attention