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).

Était-ce utile?

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

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top