Delphi-PRAXiS
Seite 2 von 2     12   

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)

Die Muhkuh 15. Dez 2007 18:54

Re: Dll: Funktionen erkennen
 
Hi,

würde ich z.B. so machen:

Delphi-Quellcode:
type
  rFuncTable = record
    FunctionName: String;
    DLLName: String;
  end;

const
  FunctionTable: array[0..1] of rFuncTable = (
  (FunctionName: 'Funktionsname'; DLLName: 'Name / Pfad zur DLL'),
  (FunctionName: 'Funktionsname2'; DLLName: 'Name / Pfad zur DLL'));

// Zugriff:
FunctionTable[0].FunctionName // --> Für den Funktionsnamen
FunctionTable[0].DLLName     // --> Für den Namen bzw. den Pfad zur DLL

sirius 15. Dez 2007 18:54

Re: Dll: Funktionen erkennen
 
Zitat:

Zitat von Desmulator
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

Das ist imho genau die Methode die .Net nutzt :zwinker: (und COM irgendwie auch)

Desmulator 15. Dez 2007 18:59

Re: Dll: Funktionen erkennen
 
@Die Muhkuh:
hm... das problem ist, dass die liste nicht immer gleich ist sondern sich verändert, also wie kann ich da einen neuen eintrag einfügen? auserdem habe ich nur den namen, nicht die nummer der funktion in dem record...

der aufruf soll so sein:

Delphi-Quellcode:
DllPath := Liste[Name];
wenns net geht, dann muss ich alles nochmal überdenken

@sirius: die mit der ini oder der funktion die die documentation ausgibt?

sirius 15. Dez 2007 19:06

Re: Dll: Funktionen erkennen
 
Die Funktion innerhalb der DLL

Desmulator 15. Dez 2007 19:09

Re: Dll: Funktionen erkennen
 
ja das habe ich auch vor... nur wie mache ich das jetzt mit dem array?

Die Muhkuh 15. Dez 2007 19:13

Re: Dll: Funktionen erkennen
 
Alternativ könntest auch eine StringList verweden:

Delphi-Quellcode:
StringList.Value['Funktionsname'] := 'DLLName';

Aufruf:

DLLName := StringList.Value['Funktionsname'];

Desmulator 15. Dez 2007 19:15

Re: Dll: Funktionen erkennen
 
Argh, ja danke, ich wusste dass das i-wie gehts xD thx an alle

Desmulator 15. Dez 2007 20:18

Re: Dll: Funktionen erkennen
 
Argh Leute ich pack das net...

also meine dll sieht bis jetzt so aus:

Delphi-Quellcode:
library DateAndTime;

uses
  SysUtils,
  Classes;

type
  DllArrayOfString = array of string;

function YourTime: string; stdcall;
begin
  result := TimeToStr(Now);
end;

function dllinfo: DllArrayOfString; stdcall;
var
  List: DllArrayOfString;
begin
  //Rückgabe des Arrays
  List[0] := 'YourTime';


  //Rückgabe
  result := List;
end;

exports
  dllinfo,YourTime;

{$R *.res}

begin
end.
und die Procedure die die Dll laden soll so:

Delphi-Quellcode:
type
  //Tüpen
  DllFunktionParamList = array of string;
  DllFunktionResult = string;
  DllFunktionList = TStringList;

  //FunktionsTyp
  DllFunktion = function(Param:DllFunktionParamList):DllFunktionResult;
  DllListFunktion = function(): DllFunktionParamList;

procedure LoadDll(DllPath: string);
var
  DllHandle: THandle;
  ListFunktion: DllListFunktion;
  List: DllFunktionParamList;
  I : integer;
begin
  try
    //Dll laden
    DllHandle := LoadLibrary(PChar(DllPath));

    if DllHandle <> 0 then begin

      //Listenfunktion einlesen
      ListFunktion := GetProcAddress(DllHandle,PChar('dllinfo'));

      if ListFunktion <> nil then begin


        //Liste laden
        List := ListFunktion();

        //Schleife, um alle Funktionen zu speichern
        for I := 0 to High(List) do begin
          //Wert speichern
          DllList.Values[List[I]] := DllPath;

        end;
      end;
    end;
  except
    //Fehler
    ShowMsg('Konnte die Dll "' + DllPath + '" nicht finden/laden',Error);
  end;
end;
Ich erhalte beim afruf List := ListFunktion(); einen Fehler, bzw. machnmal kommt er garnicht über das if ListFunktion <> nil then ...


wo ist mein fehler?

Die Muhkuh 15. Dez 2007 20:19

Re: Dll: Funktionen erkennen
 
Dein Fehler ist, dass Du Strings benutzt! Pfui! Nimm PChars! Oder lies mal ganz genau den Hinweis durch, der im Projekt steht, wenn man eine neue DLL machen möchte.

Desmulator 15. Dez 2007 20:23

Re: Dll: Funktionen erkennen
 
hm... okay ich habe ShareMem jetzt eingebunden, jedoche rhalte ich immernoch den fehler... und zwar genau da: List := ListFunktion();


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

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