Probleme mit dynamischem DLL-Einbinden



  • Hi. Ich hab mal versucht nach dem Beispiel in der FAQ eine DLL dynamisch einzubinden. Folgender Code dazu:

    //.h-Datei:
    class TDLLTest
    {
    private:
       typedef __int64 (DLLFUNCTION)(__int64);
    
       DLLFUNCTION   *pDllFunction;
    
    public:
        TDLLTest();
        void CallDllFunction(__int64 iTest1);
    };
    
    //.cpp-Datei:
    //---------------------------------------------------------------------------
    #include <vcl\vcl.h>
    #pragma hdrstop
    
    #include "Test.h"
    //---------------------------------------------------------------------------
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        TDLLTest DLLTest;
        DLLTest.CallDllFunction(StrToInt(Edit1->Text));
    }
    //---------------------------------------------------------------------------
    TDLLTest::TDLLTest()
    {
       HINSTANCE hInstance;
    
       hInstance = ::LoadLibrary("Test.dll");
       pDllFunction  = (DLLFUNCTION*)::GetProcAddress((HMODULE)hInstance, "TestFunktion");
    }
    
    void TDLLTest::CallDllFunction(__int64 iTest1)
    {
        __int64 iResult;
    
        if (pDllFunction)
            iResult = (*pDllFunction)(iTest1);
    
        Form1->Label1->Caption=IntToStr(iResult);
    }
    

    Jetzt krieg ich aber als Ergebnis der Funktion immer 1243836 raus, was ich als DLL-Name und Funktionsname eingebe is im Grunde vollkommen egal es kommt immer der gleiche Quark heraus. Die Funktion in der DLL funktioniert auf jeden Fall richtig. Kann mir jemand sagen was ich jetzt falsch gemacht hab?

    Danke im Voraus. //<< Oh mann ob Voraus oder Vorraus is doch auch egal... 🙄



  • *schieb*



  • wird doch wohl jemand wissen...



  • na ja, du prüfst auch nicht, ob du die dll richtig geladen hast:

    HINSTANCE hInstance;
    
       hInstance = ::LoadLibrary("Test.dll");
       if (hInstance != 0) {
          pDllFunction  = (DLLFUNCTION*)::GetProcAddress((HMODULE)hInstance, "TestFunktion");
       } else {
          ShowMessage("fehler beim laden der dll");
       }
    

    versuch mal das.



  • Ich geh mal davon aus dass er sie nich lädt ich probiers gerade mal aus...

    EDIT: Hm komisch das Laden der DLL klappt offensichtlich aber jetzt kommt auf einmal bei der Rechnung immer 0 heraus !? Was soll das denn jetzt!?



  • Hast Du auch mal auf meiner Seite geguckt, da habe ich das Thema mal etwas verständlicher (hoffentlich) zusammengestellt.



  • 1000 Dank F98!

    War der Punkt mit dem Unterstrich vor der Funktion... Jetzt klappts!
    Super is auch die ganze Beschreibung da, muss man sagen die is übersichtlicher als in der FAQ.

    🙂



  • Vielen Dank für das Lob! 😃

    In die "Unterstrich"-Falle bin ich auch schon getappt. Ich bin dabei bald durchgedreht. 😮


Anmelden zum Antworten