![]() |
LoadLibary Exports aus Exe / Aufruf aus DLL
Hallo Delphianer,
ich weiß der Titel ist nicht gerade schön formuliert aber mit fällt keine bessere Bezeichnung ein. Habe eigentlich nur eine Frage ob mein Vorgehen ohne Probleme funktioniert. Derzeit läuft es aber ich weiß ja nicht ob ich nicht doch irgendwann auf nen Knall hinaus laufe. Ich habe ein Programm welches Daten an Module mittels Exports zur Verfügung stellen soll. Derzeit zwei einfache Funktionen. Einen Wert aus einer Datenbank auslesen und ins Log schreiben. Mein Programm:
Delphi-Quellcode:
Die Test DLL
function WriteLog(MessageType: Integer; Msg: PChar): Boolean; stdcall;
begin if MRSession <> nil then Result := MRSession.WriteLog(MessageType, Msg) else Result := False; end; function GetValue(Ident: PChar; var Value: PChar): Boolean; stdcall; var test: string; begin if MRSession <> nil then begin Result := MRSession.GetValue(Ident, test); Value := PChar(test); end else Result := False; end; procedure Test; stdcall; begin ShowMessage('test'); end; exports WriteLog, GetValue, Test;
Delphi-Quellcode:
Sind nur Auszüge und eben auf die Schnelle zum testen. Es funktioniert auch eben, ich möchte nun wissen ob die Methode soweit in Ordnung ist. GetValue und WriteLog sollen später natürlich über die aktive Instanz ausgeführt werden.
type
TFunc1 = function (MessageType: Integer; Msg: PChar): Boolean; stdcall; TFunc2 = function (Ident: PChar; var Value: PChar): Boolean; stdcall; Ttest = procedure; function Execute(MHandle: Cardinal; Path: PChar; SessionKey: PChar; ModeratorID: Integer): Integer; stdcall; var FC1: TFunc1; FC2: TFunc2; Value: PChar; Test: Ttest; ph: Cardinal; begin ph := LoadLibrary('.\ModiAdmin.exe'); if ph = 0 then ShowMessage('Scheissendreck'); try ShowMessage('EXECUTE'); @FC1 := GetProcAddress(ph, 'WriteLog'); @FC2 := GetProcAddress(ph, 'GetValue'); @Test := GetProcAddress(ph, 'Test'); if @FC1 = nil then ShowMessage('ERROR WriteLog'); if @FC2 = nil then ShowMessage('ERROR GetValue'); Test; FC1(1, 'Hallo hier bin ich'); FC2('Host', Value); ShowMessage(Value); finally end; Result := 30; end; das WriteLog könnte ich noch über PostMessage realisieren aber bei GetValue habe ich ja einen Wert den ich fülle. Sollte das keine schöne bzw. sichere Methode sein, gibts dann alternativen? Gruß Cyber |
AW: LoadLibary Exports aus Exe / Aufruf aus DLL
Statt LoadLibrary eher GetModuleHandle, aber ansonsten siehst du ja, daß EXE und DLL das selbe PE-Format besitzen und fast gleich funktionieren, bis auf die Einstiegspunte für die Codeausführung.
Und ja, man kann eine EXE auch locker als DLL nutzen. Ist die EXE schon geladen, gibt es eigentlich keine Hindernisse. Nur wenn die EXE noch geladen werden muß, da sollte man etwas aufpassen. |
AW: LoadLibary Exports aus Exe / Aufruf aus DLL
Hey,
genau das meinte ich ja, ob ich mir zu 100% sicher sein könnte das wenn die Exe geladen ist ich genau das Handle bekomme. Danke für den Tip, werds gleich mal umsetzen. Gruß Cyber |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 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-2025 by Thomas Breitkreuz