DLL generell...



  • Hi,

    hab ne generelle Frage zu DLLs. Wie kann ich Objekte, die in einer exportierten Funktion einer DLL erstellt wurden bis zum nächsten Aufruf dieser Funktion gültig halten?
    In meinem Fall habe ich eine Dll in der u.a. eine Klasse existiert. Beim Aufruf der exportierten Funktion wird ein Objekt dieser Klasse erzeugt, jedoch wird beim Verlassen der Funktion der Destruktor dieser Klasse aufgerufen, sodass das Objekt nicht mehr existiert wenn die DLL-Funktion erneut aufgerufen wird. Wie kann ich das Verhindern?

    mfg kay



  • static



  • new



  • Danke, werds versuchen. Damit ich aber dahin komme hab ich noch ein anderes Problem:
    Die DLL-Funktion wird mit "extern "C"__declspec (dllexport)" exportiert, vom Testprogramm mit LoadLibrary und GetProcAddress aufgerufen. Die Funktion hat folgende Parameterliste (DWORD*, char*, char*, char*, char*).
    Was ich nicht verstehe ist, beim Debuggen scheinen die Parameter verschoben zu sein, also im ersten char* steht das was eigentlich bei DWORD* stehen sollte, beim zweiten char* steht das was beim ersten char* stehen sollte. Wieso?
    Die Funktion wird mit der richtigen Parameterreihenfolge aufgerufen.

    mfg Kay



  • (soweit ich weiss, aus der Erinnerung - im Zweifelsfall nachlesen in der MSDN)

    durch __declspec (dllexport) wird stdcall-(Pascal-)Aufrufkonvention spezifiziert.
    Dort ist die Reihenfolge der Parameter gegenüber C-Aufrufkonvention umgedreht.
    Sorge dafür, dass du auch den mit GetProcAddress erhaltenen Funktionszeiger auf stdcall-Aufrufkonvention (evtl. mit __declspec (dllimport)?) castest, dann stimmt's wieder.



  • @scrontch:
    danke, leider bleibt damit alles beim alten...

    mfg kay



  • Zeig doch mal ein bisschen Code, vielleicht findet dann jemand den Fehler 🙄



  • hab den Code in ein neues Projekt kopiert, jetzt gehts wieder...


Anmelden zum Antworten