Question

Lorsque nous compilons une dll à l'aide de __stdcall dans visual studio 2008, les noms de fonction compilés dans la dll sont.

Nom de la fonction

Bien que, lorsque nous compilons la même dll avec GCC avec wx-dev-cpp, GCC ajoute le nombre de paramètres de la fonction, le nom de la fonction utilisant Dependency Walker ressemble à ceci.

Nom de la fonction @ nombreParamètres ou == Nom de la fonction @ 8

Comment dites-vous au compilateur GCC de supprimer @nn des symboles exportés dans la DLL?

Était-ce utile?

La solution

__ stdcall décore le nom de la fonction en ajoutant un soulignement au début et le nombre d'octets de paramètres à la fin (séparés par un @).

Donc, une fonction:

void __stdcall Foo(int a, int b);

... deviendrait _Foo @ 8.

Si vous indiquez le nom de la fonction (non décoré) dans la section EXPORTS de votre fichier .DEF, il est exporté non décoré.

C’est peut-être la différence?

Autres conseils

Il suffit d'utiliser -Wl, - kill-at sur la ligne de commande gcc, qui transmettra - kill-at à l'éditeur de liens.

Références:

Vous pouvez également utiliser -Wl, - add-stdcall-alias pour les options de votre éditeur de liens dans GCC. Cela garantira que les deux noms de fonctions (décoré et non décoré) sont présents et peuvent être utilisés comme alias.

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