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?

È stato utile?

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.

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