Mal wieder DLL
-
Hallo LEute,
ich bekomme es einfach nicht hin, dass ich werte aus einer DLL heraus bekomme.
Den conect zur DLL bekomme ich, aber die werte dann aus einer Funktion in einer class der dll ..... keine Ahnung....// .h der dll class __declspec(dllexport) dlltest { int m_iWert; protected: void ChangeValue(void); public: dlltest(void); ~dlltest(void); void Set(int wert); int Get(void); };
// .cpp meiner Anwendung std::string m_strDieDLL = "ansicht.dll"; HINSTANCE hndlIcmp = LoadLibrary(m_strDieDLL.c_str()); if (hndlIcmp == NULL) { std::string Text = "Could not load " + m_strDieDLL; ::MessageBox(NULL, Text.c_str(), "Error:", MB_OK); return FALSE; } int (*Get)(void) = (int (*)(void))GetProcAddress(hndlIcmp, "Get"); int i = Get(); FreeLibrary(hndlIcmp);
kann mir jemand weiter helfen ??
Gruß
andy_mann
-
Bist du sicher, dass der Dll-Export so richtig ist?
Ich mach das so:
In einer extra Headerdatei das hier#ifdef _VIEWDLL_ #define DLL_EXPORT_BASIS _declspec(dllexport) #else #define DLL_EXPORT_BASIS _declspec(dllimport) #endif
In die Projekteigenschaften der dll kommt dann noch extra das _VIEWDLL_ rein.
Und die Klasse sieht dann so aus:
class DLL_EXPORT_BASIS dlltest { int m_iWert; protected: void ChangeValue(void); public: dlltest(void); ~dlltest(void); void Set(int wert); int Get(void); };
Begründen kann ich es dir leider nicht, ich hab es so gezeigt bekommen und es funktioniert. (Ist allerdings eine MFC-Erweiterungsdll...)
-
Wie, Du machst ine eine extra .h Datei, und schreibst dann nur 4 Zeillen hinein ??
Ist das MFC like ??
Und wie bekomme ich dann z.b. den Wert aus der GET methode....
es gibt insgesamt 2 Class in der dll......ich kapiere solangsam gar nichts mer.......
Gruß
andy_mann
-
Ich sag doch: Erklären kann ich es nicht - ich hab es so vorgesetzt bekommen.
"Mach das so, dann geht es." waren in etwa die begleitenden Worte.
Die extra h datei mache ich ja blos, weil man das in jeder Klasse braucht, die man außerhalb der dll nutzen will und die stdafx.h soll man nach Möglichkeit nicht in Headern includen. (Ist auch so ein Friß-oder-Stirb-Satz - aber da gab es eine einleuchtende Erklärung...)
Wenn das bei dir so geht wie bei mir, dann solltest du nach dem Umbau alle Funktionen der Klasse nutzen können.
-
hmmm..
habe es jetzt so gemacht, aber kein erfolg.
beim aufruf der Funktion "Get" schmiert er mir ab...
HINSTANCE hndlIcmp = LoadLibrary(test.dll); if (hndlIcmp == NULL) { std::string Text = "Could not load " + m_strDieDLL; ::MessageBox(NULL, Text.c_str(), "Error:", MB_OK); return FALSE; } int (*Get)(void) = (int (*)(void))GetProcAddress(hndlIcmp, "Get"); int i = Get(); FreeLibrary(hndlIcmp);
oder hast DU mir einmal ein Beispiel ??
Gruß
andy_mann
-
Du arbeitest mir LoadLibrary, das hab ich noch nicht gemacht. Bei mir hängen die als Abhängigkeiten an der Exe.
Kann es vielleicht damit zusammen hängen?
-
ich habe keine ahnung woran das ligt....
ich möchte eigentlich nur eine DLL habe, in der werte stehen, die ich einfach austauschen kann..
Mann das kann doch nicht so schwer sein.... oder muß ich den Dokter erst darin machen......
Gruß
andy_mann