AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit dynamisch geladener DLL

Ein Thema von cruiser · begonnen am 23. Jan 2007 · letzter Beitrag vom 25. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit dynamisch geladener DLL

  Alt 23. Jan 2007, 17:15
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.
Angehängte Dateien
Dateityp: pas sshbn_214.pas (4,2 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.664 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit dynamisch geladener DLL

  Alt 23. Jan 2007, 17:33
Wie ist denn GetTempDir definiert? hat der zurück gegebene Pfad den Pfadtrenner \ oder nicht?
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit dynamisch geladener DLL

  Alt 23. Jan 2007, 20:12
Die ist aus der CodeLib und hat den Trenner... hab schon ne Box werfen lassen..
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Problem mit dynamisch geladener DLL

  Alt 25. Jan 2007, 15:48
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 )
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem mit dynamisch geladener DLL

  Alt 25. Jan 2007, 15:51
hast du schonmal mit FileExists geprüft ob die Datei auch wirklcih gefunden wird?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Problem mit dynamisch geladener DLL

  Alt 25. Jan 2007, 15:55
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Problem mit dynamisch geladener DLL

  Alt 25. Jan 2007, 15:56
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Problem mit dynamisch geladener DLL

  Alt 25. Jan 2007, 16:08
Push, falls du mein Posting übersehen haben solltest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem mit dynamisch geladener DLL

  Alt 25. Jan 2007, 16:12
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Problem mit dynamisch geladener DLL

  Alt 25. Jan 2007, 16:15
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
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