funzione esportata nome del simbolo storpiatura
-
09-10-2019 - |
Domanda
Ho un D DLL che viene caricato un programma C ++ che ho controllo sopra. I LoadLibrarys programma la mia DLL e usi GetProcAddress per trovare una funzione denominata "extension_load" che prende un argomento (un puntatore). Nel mio D DLL ho:
extern (C) int extension_load(void* ptr) {
return 0;
}
E questo nome deve essere esportato come extension_load ma viene esportato come extension_load @ 4, in modo da GetProcAddress non riesce a trovarlo. Come faccio a farlo extension_load pianura senza il nome storpiatura?
Soluzione
È necessario fornire il linker con un file .def che rinomina l'esportazione. Documenti sono qui , è necessario ESPORTAZIONI.
Altri suggerimenti
ho preso a lavorare con qualche aiuto da legame di Hans Passant. Ecco il mio file .def per tutti coloro che avranno bisogno in futuro (probabilmente me stesso):
EXETYPE NT
EXPORTS
extension_load
DllMain
Il file DEF che ho è chiamato dll.def. Ho la funzione scritto come:
extern (C++) int extension_load(void* ptr) {
e l'uso IDE I è D-IDE, in modo da dare il linker il file DEF, andare al Progetto> Proprietà> Opzioni costruire e tipo
nameofdef.def
nella casella di testo Extra argomenti Linking. Ciò presuppone che il file nameofdef.def esiste nella directory principale del progetto per il D-IDE da trovare.
Non c'è davvero alcun bisogno di un file def. Basta anteporre le funzioni con export
, per esempio:.
export extern (C) int extension_load(void* ptr) {
return 0;
}
E compilazione via: dmd -ofmydll.dll mydll.d
. Naturalmente avrete bisogno di definire DllMain()
pure.