![]() |
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 |
Re: Dll: Funktionen erkennen
Zitat:
|
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:
wenns net geht, dann muss ich alles nochmal überdenken
DllPath := Liste[Name];
@sirius: die mit der ini oder der funktion die die documentation ausgibt? |
Re: Dll: Funktionen erkennen
Die Funktion innerhalb der DLL
|
Re: Dll: Funktionen erkennen
ja das habe ich auch vor... nur wie mache ich das jetzt mit dem array?
|
Re: Dll: Funktionen erkennen
Alternativ könntest auch eine StringList verweden:
Delphi-Quellcode:
StringList.Value['Funktionsname'] := 'DLLName';
Aufruf: DLLName := StringList.Value['Funktionsname']; |
Re: Dll: Funktionen erkennen
Argh, ja danke, ich wusste dass das i-wie gehts xD thx an alle
|
Re: Dll: Funktionen erkennen
Argh Leute ich pack das net...
also meine dll sieht bis jetzt so aus:
Delphi-Quellcode:
und die Procedure die die Dll laden soll so:
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.
Delphi-Quellcode:
Ich erhalte beim afruf List := ListFunktion(); einen Fehler, bzw. machnmal kommt er garnicht über das if ListFunktion <> nil then ...
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; wo ist mein fehler? |
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.
|
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 02:17 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