Exportierte Funktionsnamen ohne "_" oder Typinformationen
-
Hallo,
ich versuche gerade ein Plugin (DLL) für den Notepad++ Editor zu erstellen, allerdings will NP++ das Plugin nicht laden, weil er die Funktion "isUnicode" über GetProcAddress() nicht findet. Sitze schon stundenlang an dem Problem und hab erst jetzt gemerkt, dass der C++Builder (XE2) die Funktionsnamen mit einem "_" versieht. Eigentlich sollte das so aussehen (Funktionsnamen aus einem anderen Plugin exportiert):
LIBRARY NPPEXPORT.DLL EXPORTS beNotified @1 ; beNotified getFuncsArray @2 ; getFuncsArray getName @3 ; getName isUnicode @4 ; isUnicode messageProc @5 ; messageProc setInfo @6 ; setInfo
Die exportierten Namen in der von C++Builder erstellten DLL sehen aber so aus:
LIBRARY CCC.DLL EXPORTS ___CPPdebugHook @7 ; ___CPPdebugHook _beNotified @4 ; _beNotified _getFuncsArray @3 ; _getFuncsArray _getName @2 ; _getName _isUnicode @6 ; _isUnicode _messageProc @5 ; _messageProc _setInfo @1 ; _setInfo
Die findet der NP++ natürlich nicht, da dort ein Unterstrich hinzugefügt wurde. Nehme ich das 'extern "C"' aus meinen Deklarationen raus und aktiviere die Option "Projekt -> Optionen -> C++ Compiler -> Ausgabe -> Exportierten Symbolen keinen Unterstrich voranstellen" bekomme ich sowas raus:
LIBRARY CCC.DLL EXPORTS @beNotified$qp14SCNotification @4 ; beNotified(SCNotification *) @getFuncsArray$qpi @3 ; getFuncsArray(int *) @getName$qv @2 ; getName() @isUnicode$qv @6 ; isUnicode() @messageProc$quiuil @5 ; messageProc(unsigned int, unsigned int, long) @setInfo$q7NppData @1 ; setInfo(NppData) ___CPPdebugHook @7 ; ___CPPdebugHook
Compiliere ich über Delphi oder VC++, funktioniert es prima. Hab hier im Forum diesen Thread gefunden und darüber diesen Artikel aber das hilft mir nicht wirklich weiter. Der NP++ möchte die Funktion über GetProcAddress(..., "isUnicode"); ansprechen, aber die verstümmelten Namen findet er eben nicht und ich habe auf den NP++ keinen Einfluß.
Kann mir bitte jemand helfen? Das müsste doch bestimmt nur irgendeine Option sein.
PS: Hier das Testprojekt (vom Beispiel-Template übernommen):
TestPlugin.zip
-
Oh man... läuft jetzt.
Musste noch __stdcall einfügen. Also: extern "C" __declspec(dllexport) __stdcall BOOL isUnicode()