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 Dllextern "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 Dllextern "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.