Pointer als Argument für Funktion in einer DLL



  • Abend, hoffe mal ich bin hier im richtigen Unterforum.

    Problem ist folgendes:

    Ich möchte in meinem Programm eine Funktion in einer DLL aufrufen, welcher ich einen Pointer auf ein Objekt mitgebe, damit die Funktion in der DLL mit meinem Objekt interagieren kann.

    DLL sieht so aus:

    extern "C" {
    	__declspec(dllexport) void test(Obb* obbobj, string message){ 
    		obbobj->test(message);
    	} 
    }
    

    Programm welches die DLL aufruft so:

    typedef void (*dllfunc)(Obb*, string);
    
    int main()
    {
    	Obb tobb();
    	dllfunc f1; 
    	HINSTANCE hinstLib = LoadLibrary(_T("testdll.dll"));  
    	if (hinstLib) { 
    		f1 = (dllfunc) GetProcAddress(hinstLib, "test"); 
    		if (f1){ 
    			f1(&tobb, "DIES IST EIN TESTSTRING");
    		} 
    	} else {
    		std::cout << "Fehler beim laden";
    	}
    	BOOL fFreeResult = FreeLibrary(hinstLib); 
    	std::cin.get();
    	return 0;
    }
    

    Die Funktion test(string) der Klasse Obb macht nichts anderes als den String auf der Konsole auszugeben:

    void Obb::test(string test){
    	cout << test << endl;
    }
    

    So, das funktioniert im grunde auch, nur direkt nachdem Die Meldung ausgegeben wurde, bekomm ich folgende Fehlermeldung:

    Windows hat einen Haltepunkt in dlltest.exe ausgelöst.

    Dies kann auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in dlltest.exe oder in einer der geladenen DLLs hinweist.

    Nur leider habe ich keine Ahnung woran es liegen könnte. Irgendwelche Zugriffsverletzungen? Wird irgendwas falsch zerstört? Ich hoffe ihr könnt mir da helfen.



  • zeig mal die deklaration von obb.

    verwendest du den selben header in der DLL?

    kann auch sein, dass es am std::string liegt. wenn du die standardedition
    von mscv nutzt, gibt es da probleme das teil über DLL grenzen hinweg zu kopieren.
    teste einfach mal mit nem char *.



  • Linkst du dynamisch oder statisch gegen die Runtime Library.
    Bei beiden Projekten (DLL+Exe) gleicher Character Set?


Anmelden zum Antworten