Mehrere DLLs dynamisch einbinden?



  • Hi Leute,

    ich hab volgendes Problem. Ich will mehrere DLLs in mein Programm einbinden. Es könnten mal 2 DLLs sein aber auch mal 20 :).
    Wie ich eine DLL dynamisch einbinde steht hier:

    // Unit1.h
    //---------------
    private:	// User declarations
        HINSTANCE DllInstance;
    
    // Unit1.cpp
    //---------------
    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
    
        if (!DllInstance) DllInstance = LoadLibrary("test.dll");
        if (DllInstance) ShowMessage("DLL geladen");
    
        if (DllInstance)
            DllFunktion = (IMPFUNC)GetProcAddress(DllInstance, "_CheckCommand");
        else ShowMessage("Bitte DLL laden")
    
        if (DllFunktion) Memo1->Text = DllFunktion("EnvironVar>");
        else ShowMessage("Funktionsname existiert nicht");
    }
    
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
        if (DllInstance)
            if (FreeLibrary(DllInstance)) DllInstance = NULL; // DLL entladen
        if (!DllInstance) ShowMessage("DLL nicht geladen.");
    }
    

    Aber wie bekomme ich es hin das zum Beispiel alle DLLs, die in einer ListBox eingetragen sind nacheinander in das Programm eingebunden werden? Und das ich diese DLLs auch einzell wieder entladen kann.

    Also das müsste mit einer Klasse gehen aber ich weiss nicht genau wie?

    Kann mir da jemand weiterhelfen? wär echt cool 🙂

    Danke...... !!!!



  • Hi,

    also erstmal muss ich kurz "meckern". Deine Art und Weise zu prüfen, ob ein Handle NULL ist oder nicht, finde ich unübersichtlich und hat mich am Anfang auch verwirrt. Ich wäre eher für die leserliche Variante, aber das ist jedem seine Sache. 😃

    Zu deiner Frage. Ich hab das zwar noch nicht gemacht, aber es müsste doch möglich sein den Eintrag, der angeklickt ist, aus der ListBox auszulesen und ihn als String an LoadLibrary zu übergeben, oder nicht?



  • hab ich zwar noch nicht ausprobiert aber klingt garnicht mal so verkehrt...

    hehe 🙂 ich probiert das mal 😉

    danke!


Anmelden zum Antworten