![]() |
[C++] Dynamische DLL - Funktion nicht gefunden
Hi Leute :hi:
ich habe mich ein wenig an DLLs in C++ versucht und stehe gerade vor folgendem Problem. Die DLL sowie die beiden Testprogramme sind folgendermaßen definiert:
Code:
Die statische Version klappt auch einwandfrei, bei der dynamischen dagegen liefert mir GetProcAddress(hinstMathe, "Addieren") NULL zurück. GetLastError() liefert "127 - Die angegebene Prozedur wurde nicht gefunden". Die DLL wurde aber korrekt geladen (jedenfalls ist der hinstMathe belegt).
// Deklaration in DLL-Header
... __declspec(dllexport) double Addieren(double p_dA, double p_dB); ... // DLL-CPP ... double Addieren(double p_dA, double p_dB) { return p_dA + p_dB; } ... ---------------------------------- //Programm1 - statische Einbindung __declspec(dllimport) double Addieren(double , double); ... dErgebnis = Addieren(dA, dB); ... ---------------------------------- //Programm2 - dynamische Einbindung ... typedef double TAdd (double, double); ... TAdd * Funktion; HINSTANCE hinstMathe = LoadLibrary(_T("MatheDLL.dll")); ... Funktion = (TAdd *) GetProcAddress(hinstMathe, "Addieren"); if(Funktion) { dErgebnis = (*Funktion) (dA, dB); printf("A + B: %.4lf \n", dErgebnis); } ... Habt ihr eventuell eine Idee woran das liegen könnte? Entwicklungsumgebung: Visual-C++ 2208 |
Re: [C++] Dynamische DLL - Funktion nicht gefunden
Hallo
Schau dir doch mit Dependency Walker die Exportierten Funktionen der DLL einmal an. Passt Groß und Kleinschreibung ? mfg Reinhold |
Re: [C++] Dynamische DLL - Funktion nicht gefunden
Die Groß- und Kleinschreibung passt, die Funktionen in der DLL haben die gleiche Schreibweise wie die im Programmbeispiel.
|
Re: [C++] Dynamische DLL - Funktion nicht gefunden
wurde die DLL auch gefunden/geladen?
( was sagt hinstMathe ) |
Re: [C++] Dynamische DLL - Funktion nicht gefunden
Ich prüfe auf
Code:
und im Debugger springt in die Bedingung hinein. Also wird er sie wohl geladen haben (nehm ich jedenfalls stark an :))
HINSTANCE hinstMathe = LoadLibrary(_T("MatheDLL.dll"));
... if(hinstMathe) { ... Funktion = (TAdd *) GetProcAddress(hinstMathe, "Addieren"); if(Funktion) { dErgebnis = (*Funktion) (dA, dB); printf("A + B: %.4lf \n", dErgebnis); } ... } |
Re: [C++] Dynamische DLL - Funktion nicht gefunden
Ich habe ein wenig recherchiert und meinen Code folgendermaßen angepasst:
Code:
Hiermit funktioniert es, allerdings weiß ich nicht genau warum. Könnt ihr mir das vielleicht erklären? :)
// Deklaration in DLL-Header
... extern "C" __declspec(dllexport) double Addieren(double p_dA, double p_dB); ... // DLL-CPP ... double Addieren(double p_dA, double p_dB) { return p_dA + p_dB; } ... ---------------------------------- //Programm1 - statische Einbindung extern "C" __declspec(dllimport) double Addieren(double , double); ... dErgebnis = Addieren(dA, dB); ... |
Re: [C++] Dynamische DLL - Funktion nicht gefunden
Klar, name decoration. Intern heißen die Funktionen ein bisschen anders, zum Beispiel werden die Parametertypen in den Namen einkodiert. Extern C vereinfacht diese decoration etwas. Wenn du das nicht verwendest (extern C++), wird deine Funktion unter einem anderen - ziemlich komplizierten - Namen exportiert, den du dir mit diversen Tools auch anschauen kannst.
|
Re: [C++] Dynamische DLL - Funktion nicht gefunden
Ah, vielen Dank. jetzt bin ich doch um einiges schlauer :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz