Name mangling- DLL -
-
Hi,
kann man denn mit MinGw das name mangling einer DLL
umstellen. ALso der exportierten funktionen ??Ich hatte gehofft das man ein def File angeben kann und es dem G++ mitgeben.
Gruß
-
Okay, ich habe eine Lösung gefunden.
EXTERN_C __declspec(dllexport) HRESULT __stdcall DllGetClassObject(REFCLSID rclsid, REFIID riid, void ** ppAny); EXTERN_C __declspec(dllexport) HRESULT __stdcall DllCanUnloadNow(void); EXTERN_C __declspec(dllexport) HRESULT __cdecl DllRegisterServer(); EXTERN_C __declspec(dllexport) HRESULT __cdecl DllUnregisterServer(void);Die beiden funktionen
DllRegisterServer und
DllUnregisterServer
haben __cdecl anstatt __stdcall...Mann mann mann... das hat gedauert =)...
-
Laut MS haben die alle __stdcall.
Wieso meinst du DllRegisterServer und DllUnregisterServer wären __cdecl?
-
Hi Hustbear,
regsrv32 meinedll.dll
findet die De/Registrierungsfunktion nur, wenn ich
__cdecl
nehme.Ansonsten findes es den Einsprungspunkt nicht.
Das ist ein Windows7 64 Bit,
Und die DLL ist mit MinGw gebaut.Habe lange danach gesucht, weil, wie Du sagst, die Dokumentation was anderes behauptet.
Aber fakt ist, das Registrieren der DLL geht nur mit __cdecl gut bei mir.Gruß
-
Also nö, die Funktionen müssen schon immer
__stdcallsein. Nur dass die Namen nicht dekoriert sein dürfen.
Und das kannst du erreichen indem du ein.defFile statt__declspec(dllexport)verwendest.
-
Ja Du hast Recht.
Mit einem *.Def file kann man das Namemangling umstellen.
Das Interface kann man mit
DECLARE_INTERFACE_
und
STDMETHOD_(t,m)
definieren.So tut es ohne __cdecl
Gruß und Danke
-
Kannst Du mir ev. eine gute Quelle sagen, was ich wo bei welchem servertyp in die Registry eintragen muss ??
Bücher sind bestellt aber noch nicht hier und ich hab bock drauf das es läuft =)...
-
Uff.
Nö, Sorry.
Ich hab' da so-gut-wie immer auf Libraries/Frameworks zurückgegriffen die das für mich erledigen.Irgendwo hab' ich Code rumfliegen der nen Out-Of-Process Server registriert, und zumindest ein Teil davon malt mit Hand in die Registry rein. Aber auch nicht alles. Und Erklärung ist da auch keine dabei.
Musste wohl die Suchmaschine anwerfen...