Danke schonmal für deine Hilfe.
Code:
IsMultiThread := True;
Das habe ich, aber was meinst du mit fehlender Synchronisierung?
(Ich editier gleich den Code hier rein)
---------- Post added at 00:36 ---------- Previous post was at 00:22 ----------
So hier die Codes:
DLL
Code:
library test;
uses
SysUtils,
Windows,
Dialogs;
{$R *.res}
function tThread(p: Pointer): Integer;
begin
while True do
begin
ShowMessage('Endlosschleife soll bleiben...');
end;
end;
function StartPlugin(sParam: PChar): PChar; stdcall;
Var
Id:DWORD;
begin
BeginThread(nil,0,@tThread,nil,0,id);
EndThread(0); // Ohne das kackt die exe sofort nach dem starten der Threads ab.
end;
exports
StartPlugin;
Begin
IsMultiThread := True;
end.
EXE
Code:
program bin;
uses
SysUtils, Windows;
type
TRealFunction = function(sParam: PChar): PChar; stdcall;
function LoadDLL(DllName: PChar; Einstieg: PChar; sParam: PChar): string;
var
RealFunction: TRealFunction;
Handle: THandle;
begin
Handle := LoadLibrary(DllName);
if Handle <> 0 then begin
@RealFunction := GetProcAddress(Handle, Einstieg);
if @RealFunction <> nil then begin
result := PChar(RealFunction(sParam));
end;
FreeLibrary(Handle);
end;
end;
Var
sString: String;
begin
// sString wird eig. ausgelesen
sString := 'lal';
while True do
begin
sleep(5000);
if sString = 'lal' then
LoadDLL(PAnsiChar(GetCurrentDir + '\test.dll'),'StartPlugin',PAnsiChar('übergabe-string'));
// hier immer wieder ein command wiederholen
// allerdings passiert nichts mehr, nachdem die dll geladen wird
end;
end.