Question

Voilà comment j'ai ma fonction d'exportation déclarée au moment:

extern "C" __declspec(dllexport)
Iexport_class* __stdcall GetExported_Class();

Lorsque la source VS2008 compilé pour cela, le produit dll contient cette sous sa table d'exportation:

_GetExported_Class@0

Pour la compatibilité avec d'autres compilateurs j'ai besoin de la décoration ci-dessus pour ressembler à ceci:

GetExported_Class

Modification de la convention d'appel à __cdecl va décorer à la façon dont je veux, mais la convention serait faux, donc je ne peux pas l'utiliser. J'ai besoin d'être décoré de l'apparence __cdecl façon mais utilise __stdcall à la place.

Y at-il de toute façon de le faire sans à l'aide d'un fichier def? Y at-il un interrupteur ou une option que je peux passer à l'éditeur de liens de link.exe qui peut le faire décorer le nom d'exportation à la façon dont je veux?

Merci

Était-ce utile?

La solution

Non

. Tous les noms de __stdcall sont décorées de cette façon. Je suis étonné de voir que vous avez un autre compilateur qui n'attendre __stdcall les exportations à décorer comme celui-ci. Redéfinition l'éditeur de liens avec def est à peu près tout ce que vous pouvez faire- à moins que vous souhaitez modifier le fichier PE après la production.

Autres conseils

Je ne comprends pas pourquoi vous ne voulez pas utiliser un fichier .def, mais ceci est votre seule option.

L'éditeur de liens prend en charge un commutateur d'exportation, mais il ne peut pas être utilisé avec des fonctions qui sont __stdcall annotés:

http://msdn.microsoft.com/en-US/library/ 7k30y2k5.aspx

Le chemin de fichier def est à peu près la seule solution.

Oui:

Vous pouvez ajouter /EXPORT à la ligne de commande de lib.exe, ou ajouter un #pragma à votre fichier source:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

Ou encore plus facile: A l'intérieur du corps de l'utilisation de la fonction

#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)

Source: https://stackoverflow.com/a/2805560/280534

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