DLL Exports ohne zusätzliche Namenattribute
-
Hallo
Ich häng gerade wieder an einem kleinen Problemchen.
Ich hab eine DLL in C++ geschrieben, deren Funktionen ich mittels
#define EXPORT extern "C" __declspec(dllexport) EXPORT int init(void);exportiere. (VS 2005, kein clr, kein atl, kein mfc)
Nun möchte ich die DLL in Delphi einbinden, und brauche dazu ja auch die Prototypen. Also in Delphi die Prototypen geschrieben und direkt mittels external an die DLL gebunden. Nun schmeißt mir Delphi nen Fehler und ich hab mal mittels impdef.exe in die Exports der dll geschaut. Da wird mir folgendes gelistet:
LIBRARY MY_DLL.DLL EXPORTS _init@0 =_init @6Soweit so gut. Gebe ich nun in meiner Delphi Applikation den namen _init@0 mit, so funktioniert das einbinden der DLL.
Das möchte ich aber nicht, da ich glaube, dass sie dieser Name noch verändern kann, wenn ich die DLL erweitere.
Wie muß ich denn die Funktion in der DLL exportieren dass ich einen Export bekomme, der wie folgt aussieht:
LIBRARY MY_DLL.DLL EXPORTS init @6Danke für die Hilfe und Grüße
Daimonion
-
Hallo, ich habe immer benutzt
#pragma comment (linker, "/EXPORT:PluginMain=_PluginMain@4")http://support.microsoft.com/kb/131313 (see Exporting PASCAL-Like Symbols in 32-bit DLLs)
Mit #pragma brauchst du keine dllexport's definieren.
-
Danke für den Link. Ich werde den Artikel mal durcharbeiten und dann berichten. Ebenso werd ich deine Variante mal probieren.
Danke dir dafür!
Grüße
Daimonion
-
Also ich hab mir jetzt mal die KB Artikel durchgelesen und versteh jetzt was die einzelnen Felder bedeuten. Das Schema, wie die exportierten Namen der einzelnen Funktionen gebildet werden, ist mir nun auch klar.
Da sich aufgrund des Schemas an den Funktionsnamen nichts ändern wird, kann ich die auch getrost so lassen und bei Pascalsprachen auf Aliase setzen.
Danke für die Hilfe und Grüße
Daimonion