Hallo, erst mal sorry falls das hier nicht die richtige Sektion ist. Ich habe keine passende gefunden...
Also:
Ich möchte in einer
DLL einen Thread(oder mehrere) starten, mit einer Endlosschleife. (while)
Die EXE die die
DLL ladet, hat ebenfalls eine Endlosschleife, die nach dem Start der Threads einfach "stehen bleibt". Das soll sie aber nicht!
EXE Code:
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.
DLL Code:
Code:
library test;
uses
SysUtils,
Windows,
Dialogs;
{$R *.res}
function tThread(p: Pointer): Integer;
begin
while True do
begin
MessageBox(0, 'Endlosschleife soll bleiben...', '', 0);
end;
end;
function StartPlugin(sParam: PChar): PChar; stdcall;
Var
Id:DWORD;
begin
waitforsingleobject(BeginThread(nil,0,@tThread,nil,0,id),infinite);
end;
exports
StartPlugin;
Begin
IsMultiThread := True;
end.
Hat jemand eine Idee wie ich es hinbekomme, dass beide Endlosschleifen weiter laufen?
Danke im Vorraus!