Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dll: Funktionen erkennen (https://www.delphipraxis.net/105075-dll-funktionen-erkennen.html)

Desmulator 15. Dez 2007 08:38


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

sirius 15. Dez 2007 09:40

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?

Desmulator 15. Dez 2007 16:11

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

Garfield 15. Dez 2007 16:48

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;

Desmulator 15. Dez 2007 16:56

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...

Luckie 15. Dez 2007 16:59

Re: Dll: Funktionen erkennen
 
Schreib dir eine Funktion in der DLL, die dir eine Liste verfügbaren Funktionen der DLL zurückgibt.

Garfield 15. Dez 2007 17:01

Re: Dll: Funktionen erkennen
 
Dann musst Du Deine Funktionsaufrufe definieren und die anderen ihre Funktionen entsprechend programmieren.

Desmulator 15. Dez 2007 17:02

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

Garfield 15. Dez 2007 18:35

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.

Desmulator 15. Dez 2007 18:51

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 00:13 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