![]() |
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 |
Re: DLL öffnen, deren Name ich nicht weiß
hi,
so sollte es möglich sein:
Delphi-Quellcode:
HIH
var
dllname: string; dllhand: thandle; begin dllname := 'irgendeine.dll'; dllhand := loadlibrary(dllname); try if dllhand > 0 then begin {} end finally freelibrary(dllhand) end end; |
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 |
Re: DLL öffnen, deren Name ich nicht weiß
Tu dir hier mal das DLL Tutorial an:
![]() |
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 |
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.
|
Re: DLL öffnen, deren Name ich nicht weiß
hi,
UC, in dllname: string hast du doch dann den namen der dll. |
Re: DLL öffnen, deren Name ich nicht weiß
Ja, schon klar, wenn ich aber folgendes mache:
Delphi-Quellcode:
Da weiß Delphi logischer weiße nix mit Test anzufangen, aber es ist eine Funktion aus der DLL.
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; Oder wie meinst du sollte ich es sonst aufrufen. |
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!
|
Re: DLL öffnen, deren Name ich nicht weiß
Vorher:
Delphi-Quellcode:
Nachher:
const dllname = 'irgendeine.dll';
function EineFunc(EinParam : Cardinal) : longbool; stdcall; external dllname;
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. |
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