Hallo an alle,
um eine DLL zu entwickeln/testen habe ich in CBuilder 5 eine Projektgruppe angelegt. Die DLL entwickel ich in C, das Testprogramm in C++.
Die Funktion in der DLL erwartet einen char* als Parameter. Sie enthält keine einzige Zeile Code (siehe unten)
Das Testprogramm initialisiert den String mit "GehtNix".
Nach dem ersten DLL-Aufruf steht immer noch "GehtNix" drin.
Nach dem zweiten DLL-Ausruf steht "ä§\x12\0Nix" drin.
Die ersten 4 Byte wurden also geändert.
Nach dem dritten DLL-Aufruf stürzt das Programm ab (Access Violation).
Es scheint auf dem Stack was schiefzulaufen, aber die Parameter stimmen meiner Meinung nach überein.
Hier die DLL:
__declspec (dllexport) __stdcall unsigned short MyFunc(char *StringBuffer)
{
}
Hier das Testprogramm:
typedef unsigned short (*tMyFunc)(char *Name);
HINSTANCE Handle;
tMyFunc fMyFunc;
char buffer[10] = "GehtNix";
Handle = LoadLibrary("mydll.dll");
fMyFunc = (tMyFunc)GetProcAddress(Handle, "MyFunc");
fMyFunc(buffer);
fMyFunc(buffer);
fMyFunc(buffer);
FreeLibrary(Handle);
Könnt ihr mir bitte helfen?
Gruss Tobias
um eine DLL zu entwickeln/testen habe ich in CBuilder 5 eine Projektgruppe angelegt. Die DLL entwickel ich in C, das Testprogramm in C++.
Die Funktion in der DLL erwartet einen char* als Parameter. Sie enthält keine einzige Zeile Code (siehe unten)
Das Testprogramm initialisiert den String mit "GehtNix".
Nach dem ersten DLL-Aufruf steht immer noch "GehtNix" drin.
Nach dem zweiten DLL-Ausruf steht "ä§\x12\0Nix" drin.
Die ersten 4 Byte wurden also geändert.
Nach dem dritten DLL-Aufruf stürzt das Programm ab (Access Violation).
Es scheint auf dem Stack was schiefzulaufen, aber die Parameter stimmen meiner Meinung nach überein.
Hier die DLL:
__declspec (dllexport) __stdcall unsigned short MyFunc(char *StringBuffer)
{
}
Hier das Testprogramm:
typedef unsigned short (*tMyFunc)(char *Name);
HINSTANCE Handle;
tMyFunc fMyFunc;
char buffer[10] = "GehtNix";
Handle = LoadLibrary("mydll.dll");
fMyFunc = (tMyFunc)GetProcAddress(Handle, "MyFunc");
fMyFunc(buffer);
fMyFunc(buffer);
fMyFunc(buffer);
FreeLibrary(Handle);
Könnt ihr mir bitte helfen?
Gruss Tobias
Comment