DLL: Client Funktion aufrufen



  • Hi!
    Ich habe in einer DLL einen simplen Message Handler. Wenn dieser die Funktion in der DLL aufruft, soll in dieser Funktion eine Client Funktion aufgerufen werden:
    DLL
    Meessage
    |-> CMyDLLMessage()
    {
    MyClient()->CallClientFunction();
    }

    Aber wie bekomme ich ein Handle auf den Client?

    Danke im Voraus!!
    mfg



  • Hi,

    du musst dazu die Client-Funktion genau wie die dll Funktionen mit __declspec(dllexport) deklarieren.

    Dann kommst du in der Dll über

    GetProcAddress(NULL, "Funktion")
    

    an den Zeiger auf die Funktion.

    Grüße Rapha



  • Cool Dnake. Genau das was ich gesucht habe! Funktioniert Perfekt 😉
    mfg



  • Moin
    Ich habe das gleiche jetzt nochmal gebraucht und zwar mit einem Parameter in der Funtktion - aufeinmal gings nicht mehr 😞

    DLL:

    __declspec(dllimport) void __cdecl Callback (unsigned); 
    typedef void (CALLBACK *Callback) (unsigned); 
    //....
    FARPROC myFunc = (Callback)GetProcAddress(NULL, "Callback");
    myFunc((unsigned)m_cList.GetItemData(iItem));
    

    Client:

    //h
    extern "C" __declspec(dllexport) void Callback(unsigned id);
    //cpp
    void Callback(unsigned id)
    {}
    

    Ich probierte auch folgende Methode:
    Client

    //h
    extern "C" __declspec(dllimport) void Callback(unsigned id);
    //cpp
    FARPROC myFunc = (FARPROC)GetProcAddress(NULL, "Callback");
    myFunc((unsigned)m_cList.GetItemData(iItem));
    

    Mein Kompilier Error:

    error C2197: 'int (__stdcall *)(void)' : Zu viele Parameter uebergeben

    Was mach ich da falsch??
    Danke im Voraus!!
    mfg michael



  • Hi!
    Ich habe ein gutes Bso. gefunden:
    http://www.henkessoft.de/api6.htm

    typedef BOOL (WINAPI *PFN_ELLIPSE) (HDC, int, int, int, int);
    PFN_ELLIPSE pfn_Ellipse = (PFN_ELLIPSE) GetProcAddress(hLib, "Ellipse");
    

    Aber ich verstehe da nicht, woher PFN_ELLIPSE kommt? Weiß das jemand zufällig?

    Danke!!! mfg



  • Bin ich dumm 🙄
    Die Lösung war die ganze Zeit vor mir 😃

    typedef void (CLBFUNC)(unsigned);
    CLBFUNC* pFunction;
    VERIFY(pFunction = (CLBFUNC*)::GetProcAddress(NULL,"Callback"));
    (*pFunction)(10);
    

    Thx,
    mfg


Anmelden zum Antworten