Domanda

Questo è come io ho la mia funzione di esportazione dichiarata al momento:

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

Quando VS2008 compilato la fonte per questo, la dll prodotto contiene questo sotto la sua tabella di esportazione:

_GetExported_Class@0

Per la compatibilità con altri compilatori ho bisogno la decorazione sopra a guardare come questo, invece:

GetExported_Class

La modifica della convenzione di chiamata per __cdecl decoreranno al modo in cui voglio, ma la convenzione sarebbe sbagliato, quindi non posso usare quella. Ho bisogno di essere decorato gli sguardi __cdecl modo, ma usi __stdcall invece.

Esiste un modo per fare questo senza utilizzando un file .def? C'è un interruttore o un'opzione posso passare al linker Link.exe che può rendere decorare il nome di esportazione per il modo in cui voglio?

Grazie

È stato utile?

Soluzione

No. Tutti i nomi __stdcall sono decorate in questo modo. Sono stupito che hai qualche altro compilatore che non si aspettano __stdcall esportazioni da decorare come questo. Override il linker con DEF è più o meno tutto quello che puoi fare- a meno che non si desidera modificare il file PE dopo la produzione.

Altri suggerimenti

Non capisco il motivo per cui non si desidera utilizzare un file DEF, ma questa è l'unica opzione.

Il linker supporta un interruttore di esportazione, ma non può essere utilizzata con funzioni che sono __stdcall annotati:

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

Il modo in cui file di definizione è praticamente l'unica soluzione.

Si

È possibile aggiungere /EXPORT alla riga di comando lib.exe, o aggiungere un #pragma per il file sorgente:

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

O ancora più semplice: All'interno del corpo della funzione di utilizzo

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top