DLL einbinden und Funktion aus DLL aufrufen?
-
Hallo
Ich habe eine DLL folgendermaßen geladen.
typedef int (*MYPROC)(void); HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; ... LRESULT CALLBACK WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: hinstLib = LoadLibrary(TEXT("EINE_DLL.dll")); // If the handle is valid, try to get the function address. if (hinstLib != NULL) { ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("DLLFunktion")); // If the function address is valid, call the function. if (NULL != ProcAdd) { fRunTimeLinkSuccess = TRUE; } // Free the DLL module. } // If unable to call the DLL function, use an alternative. if (!fRunTimeLinkSuccess) MessageBox(hwnd, ">EINE_DLL.dll< konnte nicht geladen werden!", "Achtung", MB_ICONWARNING); ... case WM_COMMAND: switch (HIWORD(wParam)) { case BN_CLICKED: switch (LOWORD(wParam)) { case but1: { /*Hier möchte ich die Funktion "DLLFunktion" aus der DLL laden*/ } break; } break; } return 0; case WM_DESTROY: fFreeResult = FreeLibrary(hinstLib); if (!fFreeResult) MessageBox(0,">EINE_DLL.dll< konnte nicht freigegeben werden!","Achtung", MB_ICONWARNING); ...In Zeile 44 liegt mein Problem. Wie kann ich die Funktion aus der DLL aufrufen, wenn diese Funktion z. B. so in der DLL deklariert ist: "double Funktion(double wert1, int wert2)".
Oder was habe ich falsch gemacht? Ich habe leider noch nicht genug Erfahrung mit DLL's.
Danke im Voraus
-
Achso, wollte eigentlich einen anderen Benutzernamen verwenden.
Soll keine Beleidigung sein. (Ich find den Spruch nur lustig)
-
Bohr Dir'n Loch ins Knie schrieb:
Achso, wollte eigentlich einen anderen Benutzernamen verwenden.
Soll keine Beleidigung sein. (Ich find den Spruch nur lustig)
Erst denken, dann schreiben. :p
Wenn ich es richtig verstanden habe: Wenn die DLL richtig eingebunden ist, kannst Du die Funktion einfach normal aufrufen wie jede andere Funktion auch. Oder kommt da eine Fehlermeldung? Natürlich mußt Du sie im Header als extern bzw. Import-Funktion deklarieren.
-
Bohr dir'n Loch ins Knie schrieb:
Wie kann ich die Funktion aus der DLL aufrufen, wenn diese Funktion z. B. so in der DLL deklariert ist: "double Funktion(double wert1, int wert2)".
Laden:
typedef double (__cdecl* PDLLFUNKTION) (double, int); // nicht zwingend aber schöner HMODULE hmDeineDLL = LoadLibrary(TEXT("DATEINAME.DLL")); // implementiert als ANSI und UNICODE PDLLFUNKTION pDeineFunktion = reinterpret_cast<PDLLFUNKTION>(GetProcAdress(hmDeineDLL, "Funktion")); // ACHTUNG: nur ANSIAufruf:
double dResult = pDeineFunktion(12.23, 34.88);Allerdings weiß ich (wie Elektronix auch
) nicht genau, ob du das meinst
.PS: Fehlerüberprüfungen hab ich mir mal gescheckt, sollte man aber machen.
EDIT: Siehe unten
-
von GetProcAddress gibt es keine Unicode-Variante. Das TEXT ist dort falsch.

-
or schrieb:
von GetProcAddress gibt es keine Unicode-Variante. Das TEXT ist dort falsch.

Ups dann wars genau anders herum
...
-
Hallo
Das könnte mir schon weiterhelfen. Ich muss es noch ausprobieren.
Danke