Aus DLL dynamisches laden eines CString



  • In meiner MFC-Anwendung versuche ich einen CString an die DLL
    zu übergeben und diesen dann gegen den Wert in der DLL zu prüfen.

    Aufruf der DLL aus der Exe:

    CString strx="123";
    FARPROC pFunc; 
    HMODULE hMod = LoadLibrary("my.dll"); 
    pFunc = GetProcAddress(hMod,"SetStringx(strx)");
    
    if (pFunc)
    (*pFunc)();
    else
    MessageBox("Fehler");
    FreeLibrary(hMod);
    

    In der DLL is diese Funktion so angegeben:

    #define PLUG_API __declspec(dllexport)
    extern "C" PLUG_API void SetStringx(CString& strx);
    .
    .
    extern "C" __declspec(dllexport) void SetStringx(CString& str) 
    {   
    CString indll="123";
    CString ausexe;
    ausexe=str;
    if(indll==ausexe){
    AfxMessageBox("werte sind gleich");
    }
    else
    {
    AfxMessageBox("werte sind NICHT gleich");
    }
    }
    

    Nur wird die Funktion nie aufgerufen. Liegt es an der Zeile der Exe?:

    pFunc = GetProcAddress(hMod,"SetStringx(strx)");
    

    Ich habe keinen Plan wie ich der DLL meinen CString übergeben und
    dann dort vergleichen soll 😕
    Ich muss in jedem Fall den Aufruf dynamisch halten, da zu einem
    andren Zeitpunkt nochmal geprüft wird, ob die DLL überhaupt
    im Ordner vorhanden ist.

    Oder sollte ich diese Frage doch eher im Bereich WinAPI stellen ?
    🙄



  • Mach es so:
    Funktion in der Dll

    extern "C" __declspec(dllexport) void SetStringx(CString& str);
    

    Aufruf:

    CString strTemp = "1234";
    typdef (void)(*f)(CString&);
    
    HMODULE hDll = LoadLibrary("my.dll");
    if(!hDll)
      return;
    
    f F = 0;
    F = GetProcAddress(hDll, "SetString"); // Nur den Funktionsnamen angeben.
    if(F)
      F(strTemp);  // hier den Parameter übergeben
    FreeLibrary(hDdll);
    


  • error C2144: Syntaxfehler: 'void' sollte auf ')' folgen
    error C3861: 'typdef': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
    error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'F'

    😕



  • sollte typedef sein, da fehlt ein e 😛



  • hehejo schrieb:

    Mach es so:
    Funktion in der Dll

    extern "C" __declspec(dllexport) void SetStringx(CString& str);
    

    Aufruf:

    CString strTemp = "1234";
    typedef (void)(*f)(CString&);
    
    HMODULE hDll = LoadLibrary("my.dll");
    if(!hDll)
      return;
    
    f F = 0;
    F = GetProcAddress(hDll, "SetString"); // Nur den Funktionsnamen angeben.
    if(F)
      F(strTemp);  // hier den Parameter übergeben
    FreeLibrary(hDdll);
    

    So, jetzt stimmt das typedef. Da verschreibe ich mich gerne.



  • Ich erhalte immer noch:

    error C2144: Syntaxfehler: 'void' sollte auf ')' folgen
    error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'F'
    bzw F nicht deklarierter Bezeichner 😞



  • Naja du kannst es ja auch mit dem FARPROC machen.
    Ich wollte dir eigentlich nur zeigen, dass du bei "GetProcAddress" nur den Funktionsnahmen angeben darfst.
    Die Parameter kommen dann ganz normal beim Funktionsaufruf.


Anmelden zum Antworten