Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL öffnen, deren Name ich nicht weiß (https://www.delphipraxis.net/15295-dll-oeffnen-deren-name-ich-nicht-weiss.html)

Uncle Cracker 25. Jan 2004 23:21


DLL öffnen, deren Name ich nicht weiß
 
Wie kann ich eine DLL öffnen, von der ich den Namen erst im Programm dynamisch weiß? D.h., dass ich eine DLL umbennen und dann den Namen durch Random gebe.
Leider ist es dadurch aber nicht möglich die DLL zunutzen, denn Delphi möchte einen Konstantenausdruck.

Ich habe es schön über 'const' probiert und dann versucht währrend das Programm lief den Namen zu geben, aber das hat nicht ganz funktioniert :(


Weiß jemand vielleicht, wie das gehen könnte oder ist es gar nicht möglich?


:love: Danke UC

chris 26. Jan 2004 07:11

Re: DLL öffnen, deren Name ich nicht weiß
 
hi,

so sollte es möglich sein:

Delphi-Quellcode:
var
  dllname: string;
  dllhand: thandle;
begin
  dllname := 'irgendeine.dll';
  dllhand := loadlibrary(dllname);
  try
    if dllhand > 0 then
      begin
        {}
      end
  finally
    freelibrary(dllhand)
  end
end;
HIH

Uncle Cracker 26. Jan 2004 18:21

Re: DLL öffnen, deren Name ich nicht weiß
 
Ähmm, noch eine doofe Frage dazu :roll:

Wie kann ich denn dann die Funtkionen aus der DLL aufrufen, denn wenn ich einfach die Funktion die ich will zwischen begin und end packen, dann kann Delphi logischerweiß nix damit anfangen.

Kann mir vielleicht nochmal jemand helfen?


:love: Danke UC

Luckie 26. Jan 2004 19:13

Re: DLL öffnen, deren Name ich nicht weiß
 
Tu dir hier mal das DLL Tutorial an: http://www.luckie-online.de/tutorials/assarbad/ Da steht alles drin.

Uncle Cracker 26. Jan 2004 22:07

Re: DLL öffnen, deren Name ich nicht weiß
 
Also, ich habe mir das jetzt mal angeguckt und durchgelesen, weiß jetzt aber immer noch nicht so richtig wie ich das nun machen kann, dass er einmal aus der DLL Test.dll ließt und beim zweiten Mal aus der DLL Test2.dll usw.

Ich geben den Namen erst im Programm drin selber an und sollen die Funtkionen aus der DLL gelesen werden. Im Tutorial wird aber trotzdem immer aus der DLL SampleDLL.dll gelesen. Oder habe ich jetzt was falsch verstanden?

Wäre sehr verbunden wenn mir vielleicht doch jemand nochmal helfen könnte.


:love: Danke UC

Luckie 26. Jan 2004 22:11

Re: DLL öffnen, deren Name ich nicht weiß
 
Übergib den Namen dochnicht als hardgecodeten String, sondern als Variable das sollte es sein. Die Funktionen musst du alle dynamisch per getProcAdress laden, was anders wird dir nicht übrigbleiben.

chris 27. Jan 2004 09:39

Re: DLL öffnen, deren Name ich nicht weiß
 
hi,

UC, in dllname: string hast du doch dann den namen der dll.

Uncle Cracker 27. Jan 2004 12:38

Re: DLL öffnen, deren Name ich nicht weiß
 
Ja, schon klar, wenn ich aber folgendes mache:

Delphi-Quellcode:
var
  dllname: string;
  dllhand: thandle;
begin
  dllname := 'irgendeine.dll';
  dllhand := loadlibrary(PChar(dllname));
  try
    if dllhand > 0 then
      begin
        if Test(1) then Showmessage('OK')
      end
  finally
    freelibrary(dllhand)
  end
end;
Da weiß Delphi logischer weiße nix mit Test anzufangen, aber es ist eine Funktion aus der DLL.
Oder wie meinst du sollte ich es sonst aufrufen.

Luckie 27. Jan 2004 12:40

Re: DLL öffnen, deren Name ich nicht weiß
 
Was ist 'Test'? Und wie man Funktionen aus einer DLL dynamisch läd steht auch in dem Tutorial drin und ich habe dir schon ein Stichwort für die Suche gegeben: GetProcAdress!

scp 27. Jan 2004 14:03

Re: DLL öffnen, deren Name ich nicht weiß
 
Vorher:
Delphi-Quellcode:
const dllname = 'irgendeine.dll';

function EineFunc(EinParam : Cardinal) : longbool; stdcall; external dllname;
Nachher:
Delphi-Quellcode:
type
  TEineFunc = function (EinParam : Cardinal) : longbool; stdcall;

var
  EineFunc : TEineFunc;


var
  dllname: string;
  dllhand: thandle;
  nummer: integer;
procedure LoadDLL;
begin
  dllname := 'irgendeine' + IntToStr(nummer) + '.dll';
  dllhand := loadlibrary(PChar(dllname));
  try
    if dllhand <> 0 then
      begin
        EineFunc := GetProcAddress(dllhand, 'EineFunc');
      end;
  finally
    freelibrary(dllhand);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 Uhr.
Seite 1 von 2  1 2      

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