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:
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;
Die Test
DLL
Delphi-Quellcode:
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;
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.
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