Habe mal alles in C++ minimiert und probiert. Hier meine DLL die aus der anderen DLL aufgerufen werden soll:
Diese DLL funktioniert definitiv!!
und hier die aufrufende DLL:
Der Aufruf i=Test(d1) scheint faul zu sein warum?
Wenn ich die obere DLL ohne Parameter definiere und aufrufe bekomme ich den
Integer-Rückgabewert korrekt zurück, nur mit Parameter gehts nicht. Was ist hier faul?
Code:
// DLL die von der anderen Dll aufgerufen wird #include "stdafx.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } #define DllExport extern "C" __declspec( dllexport ) #define WINAPI __stdcall // Interface DllExport int WINAPI Test (double&); // Implementation DllExport int WINAPI Test (double& d1) { int i = 7; i = (int)d1 + i; return i; } // DLL die von der anderen Dll aufgerufen wird #include "stdafx.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } #define DllExport extern "C" __declspec( dllexport ) #define WINAPI __stdcall // Interface DllExport int WINAPI Test (double&); // Implementation DllExport int WINAPI Test (double& d1) { int i = 7; i = (int)d1 + i; return i; }
und hier die aufrufende DLL:
Code:
// Diese Dll ruft die Test-Funktion in der xyz.dll auf //*** Test Schnittstelle zur DLL definieren typedef int (*Test_t)(double&); Test_t Test; //*/ BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { //************** Dll holen -> Handle hLib HMODULE hLib = LoadLibrary("xyz.dll"); //Adresse der Funktion holen Test = (Test_t) GetProcAddress (hLib, "Test"); return TRUE; } #define DllExport extern "C" __declspec( dllexport ) #define WINAPI __stdcall // Interface DllExport int WINAPI fDllTest (double&); // Implementation DllExport int WINAPI fDllTest(double& d1) { int i = 0; // Aufruf der anderen DLL -> Absturz?? i=Test(d1); return i; } // Diese Dll ruft die Test-Funktion in der xyz.dll auf //*** Test Schnittstelle zur DLL definieren typedef int (*Test_t)(double&); Test_t Test; //*/ BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { //************** Dll holen -> Handle hLib HMODULE hLib = LoadLibrary("xyz.dll"); //Adresse der Funktion holen Test = (Test_t) GetProcAddress (hLib, "Test"); return TRUE; } #define DllExport extern "C" __declspec( dllexport ) #define WINAPI __stdcall // Interface DllExport int WINAPI fDllTest (double&); // Implementation DllExport int WINAPI fDllTest(double& d1) { int i = 0; // Aufruf der anderen DLL -> Absturz?? i=Test(d1); return i; }
Wenn ich die obere DLL ohne Parameter definiere und aufrufe bekomme ich den
Integer-Rückgabewert korrekt zurück, nur mit Parameter gehts nicht. Was ist hier faul?