Dynamischer Zugriff auf eine dll
-
Ich glaube den Hinweis auf das __stdcall sollte auch beachtet werden.
-
Alexander Kempf schrieb:
Komisch, daß dieser doofe Compiler einfach nicht errät, daß Du nicht auf
DPInitDll sonder eigentlich auf DPInitDll* umwandeln willstDas MUSS er auch nicht erraten, aber wie verrate ich ihmn das den genau? Danke!
-
Tja, ich würd mal sagen, indem du auf DPInitDll* castest.
-
roN schrieb:
Das MUSS er auch nicht erraten, aber wie verrate ich ihmn das den genau? Danke!
Was eine Typumwandlung (type cast) ist, weißt Du aber? Der Compiler hilft dir übrigens,
indem er Dir die Zeilennummer ausgibt, in der der Fehler steht.Gruß,
Alexander
-
Alexander Kempf schrieb:
Was eine Typumwandlung (type cast) ist, weißt Du aber? Der Compiler hilft dir übrigens,
indem er Dir die Zeilennummer ausgibt, in der der Fehler steht.ja, irgendwie so geht doch das:
pDPInit = typeid (DPInitDLL*)(DPInitDll)::GetProcAddress(hInstance, "DPInit");
-
roN schrieb:
ja, irgendwie so geht doch das:
pDPInit = typeid (DPInitDLL*)(DPInitDll)::GetProcAddress(hInstance, "DPInit");
...oder vielleicht:
pDPInit = (DPInitDLL*) ::GetProcAddress(hInstance, "DPInit");
-
ah, nein, hab's geschafft:
pDPInit = (DPInitDll*)::GetProcAddress(hInstance, "DPInit");
*dummbin*
Okay, weiter geht's:void __fastcall TProfibus::Init(int SlaveID_int, unsigned int uPort) { // einstellen des COM-Ports und der Busgeschwinigkeit LPSTR pIni="COM1,SA1,01,00,60,09,C0,12,33,00,7D,7E,01,03,00,10,08,94,00,90,01,20,03,00,04,2C,01,1E,00", pDll= "fdlrs"; DPInitDll dpr; int Test_var; // result configuration if (pDPInit) // testen ob die Var noch gültig ist { dpr=pDPInit(pDll, pIni); // Hier motzt der Compiler, "L-Wert erwartet" <----------- if (dpr==DP_NO_ERROR)// Initialisierung des Profiadapters ShowMessage("Juhuuuuuuuuuuuuuuuiiiiiiiiiiiiiii!!!!!!!!!!!!!"); Tools::SetAllComponents(Main_Frm, true, crArrow); Main_Frm->Memo1->Lines->Add(pDPInit(pDll,pIni)); } }
-
dpr anders deklarieren
unsigned long dpr; // ... if (dpr==0)// Initialisierung des Profiadapters // usw.
Probier's doch erstmal so...
-
Und Ich weiß auch schon, wo der Compiler als nächstes meckern wird.
-
WebFritzi schrieb:
Und Ich weiß auch schon, wo der Compiler als nächstes meckern wird.
Und bestimmt nicht das letzte mal...
-
Aber er mekert weiter oben ja schon, bei
dpr=pDPInit(pDll, pIni);
da bringt nichts wenn ich das prüfen der Var verändere auf:if (dpr==0)// Initialisierung des Profiadapters
roN schrieb:
void __fastcall TProfibus::Init(int SlaveID_int, unsigned int uPort) { // einstellen des COM-Ports und der Busgeschwinigkeit LPSTR pIni="COM1,SA1,01,00,60,09,C0,12,33,00,7D,7E,01,03,00,10,08,94,00,90,01,20,03,00,04,2C,01,1E,00", pDll= "fdlrs"; DPInitDll dpr; int Test_var; // result configuration if (pDPInit) // testen ob die Var noch gültig ist { dpr=pDPInit(pDll, pIni); // Hier motzt der Compiler, "L-Wert erwartet" <----------- if (dpr==DP_NO_ERROR)// Initialisierung des Profiadapters ShowMessage("Juhuuuuuuuuuuuuuuuiiiiiiiiiiiiiii!!!!!!!!!!!!!"); Tools::SetAllComponents(Main_Frm, true, crArrow); Main_Frm->Memo1->Lines->Add(pDPInit(pDll,pIni)); } }
-
Sieh dir doch bitte mal die Deklaration von dpr in Alexanders Post genau an.
-
Braunstein schrieb:
Sieh dir doch bitte mal die Deklaration von dpr in Alexanders Post genau an.
UUUUUUUUps, hm okay, hab' das behoben... und funktioniert jetzt, ausser das die Funktion 4 und nicht 0 zurückgibt ärger aber da könnt Ihr mir wahrscheinlich nicht helfen, aber vielleicht beim verstehen der Fehlermeldung:
Was heisst FDL-Library und was bedeutet das? "DP_FDL_LOAD_FAILED, / unable to load FDL library */*"