Les exportations du CCG de nom de la fonction décorée uniquement de dll
-
22-09-2019 - |
Question
J'ai une dll, il exporte une fonction ...
extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}
Je compile avec ce Code :: Blocks compilateur GCC (de V3.4.5). Problème: les exportations dll résultant nom de la fonction décorée ...
MP_GetFactory@4
ne se charge pas, devrait être bon vieux ...
MP_GetFactory
Je l'ai fait des recherches sur ce pendant environ 4 heures. Je pense que --add-stdcall-alias est la possibilité de résoudre ce problème. Mon Code :: Blocks journal affiche ...
mingw32-g ++ exe -shared -Wl, -. Out-implib = bin \ Debug \ libGainGCC.a -Wl, - obj dll \ Debug \ se_sdk3 \ mp_sdk_audio.o obj \ Debug \ se_sdk3 \ mp_sdk_common.o obj \ Debug \ Gain \ Gain.o de \ Debug \ Gain \ bin les gain.res -o \ Debug \ GainGCC.sem --add-stdcall-alias -luser32
.. donc je pense que c'est la bonne option là-dedans? Mais pas de chance. Walker montrent que la dépendance du nom décoré exporté. Je l'ai eu à travailler un peu à l'aide __cdecl au lieu de __stdcall, le nom est ensuite exporté ok, mais la fonction corrompt la pile lorsqu'elle est appelée (parce que l'appelant attend l'autre convention d'appel).
La solution
Désolé de répondre à ma propre question, enfin compris.
Projet / Options de construction / Linker / Autres options Linker -Wl, - kill-à
... tue la décoration symbole '@' etc.
Autres conseils
Je pense qu'il devrait être -Wl, - add-stdcall-alias et le « kill-à » tours feront le fichier de bibliothèque d'importation généré non utilisable
.