DLL Problem o_O
-
Hi!
Ich habe in meinem Programm DLLs als Plug-Ins benutzt.
Nun, alles lief prima - nur jetzt ging es daran meiner DLL eine Struktur zu übergeben.
Die Struktur nannte sich CDLLInfo und sie sah etwa so aus:
struct CDLLInfo
{
CSettings *Settings;
};Nichts weiter..
Ich schickte der DLL also als Parameter bei der Funktion diese Strukur mit - Es funktioniert!
Ich schickte der DLL den Parameter auch bei einer zweiten Funktion mit - Es funktioniert nicht mehr. Es stürzt mit einer Zugriffsverletzung ab.Nach langem testen und überprüfen bin ich zu folgenden fakten gekommen:
- Wenn ich nur einer der beiden Funktionen die Struktur übergebe, funktioniert es.
- Die DLLs haben 100%ig die selben Strukturen
- Die DLLs benutzen die Strukturen noch nicht mal.Selbst wenn ich das ganze über einen void * laufen lasse gehts nicht.
So sieht die Funktion aus bei der das ganze abstürzt.extern "C" __declspec(dllexport) char *__stdcall GetFileExt(void *a)
{
return ".bmp";
}Woran kann das liegen oder wie kann ich probieren das Problem zu beheben?
-
ich denke mal das problem liegt in return ".bmp";
ich denke der zeiger auf den char den du zurückgibst ist ungütlig, da der text mit dem ende der funktion seinen gültigkeitsbereich verlässt.
du solltest zeiger als rückgabewert mit bedacht einsetzen, eben aus derartigen gründen.
besser ist es, wenn du als parameter einen zeiger auf ein char array verlangst und diese mit den werten füllst ( z.b. strcpy( text, ".bmp" ) ).
aufpassen musst du hier, dass die arraygrenze nicht überschritten wird...
-
Danke schonmal - aber so wirklich tut sich da immernoch nichts...
Jetzt hab ich es sogar schon nahezu auf 0 gekürzt.
/* ... */ extern "C" __declspec(dllexport) void __stdcall GetDLLInfo(CDLLInfo* info) { info->Name = "Windows Bitmap"; info->Description = "Importiert Windows Bitmap-Dateien\r\n\r\nVersion 0.1b"; info->Type = dllImage; } extern "C" __declspec(dllexport) void __stdcall GetFileExt(void) { }So funktioniert das ganze - Beide Funktionen werden problemlos aufgerufen!
Und so funktioniert es nicht mehr:
extern "C" __declspec(dllexport) void __stdcall GetDLLInfo(CDLLInfo* info, CSettings *s)Ich ändere selbstverständlich auch die Parameter in der Datei wo ich die DLL aufrufe.
dllGetDLLInfo( /* ... */ );
/* ... */
// Und hier stürzt das ganze ab:
dllGetFileExt();Ich versuche mal eine kurze Version vom ganzen Problem zu kriegen.