![]() |
Dll: Funktionen erkennen
Hallo Leute,
also ich habe das Problem, dass, falls man dlls benutzen will, deren funktionen schon alle kennen muss, damit man sie entwerder dynamisch laden kann oder schon direkt am anfang. Ich will aber sowas sie Module machen, sodass man einfach die dll datei in das verzeichniss legt, sie geladen wird und wenn ein TcpClient ein commando sendet, soll gegukt werden, ob diese funktion in einer Dll zur verfügung steht. Dann sollen eventuelle parameter erkannt werden, damit ich diese vom Client anfordern kann... Beispiel ( <- Server zu Client, -> Client zu Server ): <- Ready -> [Command] Jetzt wird gegukt ob [Command] zurverfügung steht, wenn nicht <- Undefined ansonsten, falls Parameter gebraucht werdern <- Param -> [Param1] -> [Param2] -> ParamEnd Jetzt wird die Funktion [Command] mit den Parametern [Param1] und [Param2] aufgerufen. Ich hoffe ihr habt das jetzt verstanden^^ Naja ich suche in der Zeit auch mal weiter nach möglichkeiten... cia |
Re: Dll: Funktionen erkennen
Ich habe noch nicht genau verstanden, was du willst.
Es ist richtig, dass du bei einer Win32-DLLs maximal die Funktionsnamen und deren Einsprungadresse bekommst. (ist übrigens bei .Net anders/besser) Das kannst du natürlich auch bei Win32DLLs ändern indem du eine standard-Funktion implementierst, welche RTTI-mäßig dier den Ihalt der DLL erzählt. Der zweite Teil deines Beitrags klingt, als willst du in der DLL einen TCP-Server initialisieren, der jedem Client erzählt, welche Funktionen in der DLL sind. Das auch ein schönes Konzept. Ähm :gruebel: und wo war jetzt die Frage? |
Re: Dll: Funktionen erkennen
Ist eigendlich ganz einfach.
der Client sendet dem Server ein Command, dieser gukt, ob es in einer der zur verfügung stehenden dlls gibt. dann führt er es aus und gibt das ergbeniss zurück. wir kann ich jedoch eine dll so auslesen, dass ich alle funktionen + parameter erhalte... atm bin ich drauf und dran es über die RTTI methode zu machen, oder ein documentations file zumachen, der eingelesen wird |
Re: Dll: Funktionen erkennen
Mit LoadLibrary kann man eine DLL laden und über GetProcAddress den Einsprungpunkt suchen. Die erforderlichen Parameter musst Du allerdings wissen und vorher unter Type deklarieren. Ergibt Assigned dann NIL, existiert Deine Funktion nicht.
Delphi-Quellcode:
Const
szNameDLL = 'MediaInfo.DLL'; szNameMediaInfo_Open = 'MediaInfo_Open'; ... Type TFNMediaInfo_Open = function(File__: PAnsiChar): Cardinal cdecl {$IFDEF WIN32} stdcall {$ENDIF}; ... var lib: THandle; MediaInfo_Open: TFNMediaInfo_Open; ... Function GetEntryPoints: Boolean; implementation Function GetEntryPoints: boolean; begin @MediaInfo_Open := NIL; ... lib := LoadLibrary(@szNameDLL[1]); if lib = 0 then GetEntryPoints := False else begin GetEntryPoints := True; @MediaInfo_Open := GetProcAddress(lib, @szNameMediaInfo_Open[1]); if not Assigned(MediaInfo_Open) then GetEntryPoints := False; ... end; end; |
Re: Dll: Funktionen erkennen
ja wie man läd weiß ich ja, und auch benutzt habe ich dlls schon, jedoch will ich ja auch das jeder andere einfach ein modul für das prog schreiben kann und ohne das ich davon was wissen muss...
|
Re: Dll: Funktionen erkennen
Schreib dir eine Funktion in der DLL, die dir eine Liste verfügbaren Funktionen der DLL zurückgibt.
|
Re: Dll: Funktionen erkennen
Dann musst Du Deine Funktionsaufrufe definieren und die anderen ihre Funktionen entsprechend programmieren.
|
Re: Dll: Funktionen erkennen
daran habe ich schon gedacht... dann müsste allerdings jedes modul diese funktion beinhalten, aber das is immernoch besser als ne ini-datei für jede dll
|
Re: Dll: Funktionen erkennen
Nicht unbedingt. Du müsstest definieren, welche Funktionen enthalten sein müssen und welche enthalten sein dürfen. Dann musst Du prüfen, welche Funktion tatsächlich enthalten sind und entsprechend reagieren.
|
Re: Dll: Funktionen erkennen
es läuft alle gut, doch atm steh ich auf dem schlauch, ich brauche ein array das so aufgebaut ist
[Funktionsname] -> [DllPath] [Funktionsname2] -> [DllPath] [...] -> [...] also ein array in dem steht , in welcher dll welche funktion ist, wie bekomm ich das hin,ich wette die lösung ist einfach und lag die ganze zeit vor meiner nase :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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