Komponente nutzt DLL. Wo hinlegen?



  • Hallo.

    Ich habe eine Komponente die zip32.dll nutzt. Normal müsste man diese wohl in ein System Ordner legen ala \WINNT\System damit die Komponente fehlerfrei arbeitet.
    Jedoch wollte ich gerne diese in einem meiner Programm Unterordner ablegen.

    Damit sie dort gefunden wird, müsste ich in die autoexec.bat den Pfad eintragen. Was wiederrum einen Neustart bedeuten würde und auch nicht möchte.

    Was und wo müsste ich in die Registry eintragen, damit die DLL in einem Ordner meiner Wahl gefunden wird? Bzw gibt es noch andere Alternativen?

    Ich habe sie schon in der Projektverwaltung hinzugefügt.
    Das brachte aber garnichts 🙄

    Es gibt diesen schönen Befehl AddFontResource zum hinzufügen von Fonts aus einem beliebigen Ordner. Gibts sowas nicht auch für DLLs? 😕



  • Sucht ein Programm nciht standardmässig im Ordner der exe nach der DLL? oO



  • Die dll, muß in System, windows, C:\ ODer da wo die exe datei ist (die die dll aufruft) liegen.

    Gruß



  • Ich weiss wo es liegen kann. Bitte nicht nur Überschrift lesen und wild drauf antworten, sondern den Text dazu lesen.

    DLL kann bei EXE oder einem dem System bekannten Ordner liegen.
    Das weiss ich aber ich brauch es halt "anders"!
    Ich möchte selber sagen wo die DLL liegt!

    Die Frage ist nun ob man dies durch die Registry steuern kann und wenn dann durch welchen Eintrag. Bzw ob es Win32 Funktionen gibt wo man dem OS zur Laufzeit einen zusätzlichen Systempfad bzw dllpfad angeben kann. Ähnlich wie bei Fonts aus eignem Ordnern.



  • Für gewöhnlich kann man DLL- und OCX-Dateien mit regsvr32 registrieren. Vermutlich muss dann aber die DLL ein bestimmtes Format besitzen,
    wahrscheinlich konkrete Methoden.

    Gruß,

    Alexander



  • Dann bind die dynamisch ein.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
        if (!DllInstance) DllInstance = LoadLibrary("DllName.dll"); // DLL laden
    
        if (DllInstance) Form1->Caption = "DLL wurde geladen.";
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    
        if (DllInstance)
           if (FreeLibrary(DllInstance)) DllInstance = NULL; // DLL entladen
    
        if (!DllInstance) Form1->Caption = "DLL nicht geladen.";
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    
        // Funktionstyp deklarieren
        typedef int (__stdcall *IMPFUNC) (int, int);
    
        // würde die Funktion 2 Floatwerte benötigen und als Ergebnis einen Bool-Wert liefern
        // sähe die typdef-Deklaration folgendermaßen aus:
        // typedef bool (__stdcall *IMPFUNC) (float, float);
    
        // Deklaration für die DLL-Funktion
        IMPFUNC DllFunktion;
        int iSumme;
    
        if (DllInstance)
    

    Cut [Mehr auf http://fatman98.funpic.de/]



  • Danke! Aber das Problem ist das die DLL von einer Komponente benötigt wird und nur diese damit arbeitet. Also bringt mir das leider garnichts 😞


Anmelden zum Antworten