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 willst 😉

    Das 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 */*"


Anmelden zum Antworten