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 __stdcall sein. Nur dass die Namen nicht dekoriert sein dürfen.
    Und das kannst du erreichen indem du ein .def File 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...


Anmelden zum Antworten