Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit dynamisch geladener DLL (https://www.delphipraxis.net/84919-problem-mit-dynamisch-geladener-dll.html)

cruiser 23. Jan 2007 16:15


Problem mit dynamisch geladener DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.

Ich habe mir das lange schon vorgenommen und endlich auch umgesetzt. Eine Unit, die eine DLL kapselt von statisch auf dynamisch umstellen. Das zuweisen der Prozeduren scheint auch zu funktionieren, zumindest sieht es dannach aus. Solange die DLL im Programmverzeichnis liegt oder in den Suchpfaden arbeitet es tadellos. Liegt sie aber (wie ich es gern will) optional im Temp-Verzeichnis lädt es die DLL nicht, obwohl ich dafür eine extra Routine im initialization gebastelt hab. ich hab bereits sämtliche DCU's gelöscht und das Package dem die Unit angehört neu kompiliert. Es bringt alles nichts. Vielleicht habt ihr dazu ja eine Idee. Die Datei ist angehängt. Vielen Dank schon mal im Voraus.

sh17 23. Jan 2007 16:33

Re: Problem mit dynamisch geladener DLL
 
Wie ist denn GetTempDir definiert? hat der zurück gegebene Pfad den Pfadtrenner \ oder nicht?

cruiser 23. Jan 2007 19:12

Re: Problem mit dynamisch geladener DLL
 
Die ist aus der CodeLib und hat den Trenner... hab schon ne Box werfen lassen..

cruiser 25. Jan 2007 14:48

Re: Problem mit dynamisch geladener DLL
 
Ich pushe nur ungern, aber hat da jemand mehr Ahnung? Ich verzweifel langsam. Kann es sein, dass es am absoluten Pfad liegt? (Bei mir kommt da der String 'D:\Users\Temp\lib...dll' raus, hab den dll-Namen nich im Kopf ;) )

SirThornberry 25. Jan 2007 14:51

Re: Problem mit dynamisch geladener DLL
 
hast du schonmal mit FileExists geprüft ob die Datei auch wirklcih gefunden wird?

Luckie 25. Jan 2007 14:55

Re: Problem mit dynamisch geladener DLL
 
Wenn die DLL da liegt, dann sollte sie auch geladen werden. Mach mal:
Delphi-Quellcode:
  if FileExists(GetTempDir + 'libeay32.dll') then
  begin
    hLib := LoadLibrary(PChar(GetTempDir + 'libeay32.dll'))
    if hLib = INVALID_HANDLE_VALUE then
      MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'LoadLibrary', 0);
  end
  else
    MessageBox(0, PChar(Format('Datei nicht in %s gefunden', [GetTempDir])), 'FileExistst', 0);
Dann sollten wir mehr wissen.

cruiser 25. Jan 2007 14:56

Re: Problem mit dynamisch geladener DLL
 
Das ist ja ge nau so drin... hm... ich poste mal den initialization-Teil:

GetTempDir feuer bei mir den string 'D:\Users\Temp\' raus.
hLib ist im Implementation als var hLib: cardinal; deklariert

Delphi-Quellcode:
initialization

  if FileExists(GetTempDir + 'libeay32.dll')
  then
    hLib := LoadLibrary(PChar(GetTempDir + 'libeay32.dll'))
  else
    hLib := LoadLibrary('libeay32.dll');



    if hLib <> 0 then
    begin
      @BN_new := GetProcAddress(hLib, 'BN_new');
      @BN_init := GetProcAddress(hLib, 'BN_init');
      @BN_clear_free := GetProcAddress(hLib, 'BN_clear_free');
      @BN_free := GetProcAddress(hLib, 'BN_free');
      @BN_rand := GetProcAddress(hLib, 'BN_rand');
      @BN_num_bits := GetProcAddress(hLib, 'BN_num_bits');
      @BN_bin2bn := GetProcAddress(hLib, 'BN_bin2bn');
      @BN_bn2bin := GetProcAddress(hLib, 'BN_bn2bin');
      @BN_hex2bn := GetProcAddress(hLib, 'BN_hex2bn');
      @BN_bn2hex := GetProcAddress(hLib, 'BN_bn2hex');
      @BN_is_bit_set := GetProcAddress(hLib, 'BN_is_bit_set');
      @BN_cmp := GetProcAddress(hLib, 'BN_cmp');
      @BN_set_word := GetProcAddress(hLib, 'BN_set_word');
      @BN_lshift := GetProcAddress(hLib, 'BN_lshift');
      @BN_add_word := GetProcAddress(hLib, 'BN_add_word');
    end;

finalization

  FreeLibrary(hLib);

end.
hrm... wird evtl. das finalization zu früh getriggert?

Luckie 25. Jan 2007 15:08

Re: Problem mit dynamisch geladener DLL
 
Push, falls du mein Posting übersehen haben solltest.

cruiser 25. Jan 2007 15:12

Re: Problem mit dynamisch geladener DLL
 
Sorry, Leute... hab es gefunden... die Frickler, die das verbrochen habn, haben noch in andren files die Datei benutzt ;) also noch mehr anpassen. Danke euch trotzdem.

Und danke Lucky... durch deine Möglichkeit hab ich bemerkt, dass meine modifizierte Datei die DLL im Temp definitiv findet

Luckie 25. Jan 2007 15:15

Re: Problem mit dynamisch geladener DLL
 
Solch eine Fehlerbehandlung solltest du zu mindest beim Entwickeln zum Debuggen immer einbauen. Und zum Schluss noch für den Anwender, damit der weiß, was los ist und dir einen entsprechende Fehlerbericht geben kann, sonst kommt bei dir nur an: "Geht nicht." und damit kannst du dann auch nichts anfangen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz