Announcement

Collapse
No announcement yet.

Dll aus einer Dll aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dll aus einer Dll aufrufen

    Habe mal alles in C++ minimiert und probiert. Hier meine DLL die aus der anderen DLL aufgerufen werden soll:

    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; 
    }
    Diese DLL funktioniert definitiv!!
    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; 
    
    }
    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?
Working...
X