Ich habe eine D-DLL, die von einem C++ - Programm geladen wird, das ich nicht kontrollieren kann. Das Programm LoadLibrarys my DLL und verwendet GetProcAddress, um eine Funktion mit dem Namen "extension_load" zu finden, die ein Argument (einen Zeiger) benötigt. In meinem D DLL Ich habe:Exportierte Funktion Symbol Name Mangling
extern (C) int extension_load(void* ptr) {
return 0;
}
Und dieser Name als extension_load exportiert werden muss, sondern als extension_load wird @ 4 exportiert, so GetProcAddress nicht finden können. Wie mache ich es einfach extension_load ohne den Namen mangling?
Und findet GetProcAddress * nicht * die Funktion? Woher kommt die 'extension_load @ 4' (dh wie hast du herausgefunden, dass es dieser Name war)? – jpalecek
@jpalecek, Sorry, ich dachte es wäre impliziert. GetProcAddress findet die Funktion nicht unter dem Namen extension_load. Das @ 4 kommt von der Länge aller Argumente in Bytes, und ich weiß extension_load @ 4 ist, was es gerade exportiert wird, weil, wenn ich den Prozess mit einem Debugger öffne und die Zeichenfolge im Speicher ändere, um extension_load @ 4 zu sein, die Funktion gefunden. –