Problem beim Variablenzugriff einer DLL-Funktion



  • Ich habe folgendes Problem:
    Ich binde in meinem Programm eine eigene DLL ein, die grob folgendermaßen aufgebaut ist:

    teds01.h

    ...
    #define TEDS01_API __declspec(dllexport)
    ...
    extern "C" TEDS01_API void Hersteller (void *pParam, BOOL Lesen);
    ...
    

    teds01.cpp

    ...
    #define TEDS01_EXPORTS
    ...
    TEDS01_API void Hersteller(void *pParam, BOOL Lesen) {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	CString *pName = (CString *)pParam;
    	CString Nam;
    	Nam = "wert";
    	*pName = Nam;   //hier kommt der Fehler :(
    
    }
    ...
    

    Auf die Funktion der DLL greife ich im Hauptprogramm so zu:

    HMODULE handle;
    handle = LoadLibrary("teds01.dll");
    CString Her;
    
    if (handle != NULL)
    {
    	typedef void (*DLLFUNC) (void *pParam, BOOL Lesen);
    	DLLFUNC func = (DLLFUNC)GetProcAddress(handle, "Hersteller");
    	if (func)
    	   func((void*)&Her, 1);
    

    Leider erhalte ich an der in der DLL markeirten Stelle folgenden Debugger-Fehler:
    Debug Assertian Fehler mit Hinweis auf einen _CrtIsValidHeapPointer(pUserData) in einer dbgheap.c

    Da die Wertezuweisung in der DLL an sich funktioniert (habe die Methode in einem anderen Programm ausprobiert) muss es an der Einbindung der DLL liegen oder an irgend einem fehlenden Befehl in der DLL.
    Kann mir da jemand weiterhelfen?



  • Du musst die EXE und die DLL mit der gleichen DLL-Version der dynamischen CRT linken!



  • Danke für Deine Antwort - allerdings weiß ich nicht, was eine dynamische CRT ist. 😕
    (EXE und DLL sind mit der gleichen Viausl C++ - Version erstellt.)



  • Projekteinstellungen: "C/C++|Code generation|Runtime Library"
    und hier dann
    "Multi-threaded Debug DLL (/MDd)"
    bzw.
    "Multi-threaded DLL (/MD)"
    bei beiden Projekten einstellen.


Anmelden zum Antworten