Hi,
I try to pass parameter on my thread with Lazarus, but never succeed, please take a look at my codes
type
ThreadDLL = class(TThread)
protected
procedure LoadingLib(const ProcName: ansistring; ProcQuery: array of string);
procedure Execute; override;
end;
{ Tmainform }
Tmainform = class(TForm)
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
procedure ThreadDLLExec;
var
mainform: Tmainform;
implementation
type
TDLL = function (ProcQuery: array of string; var DataResult: TMemoryStream): boolean; stdcall;
{$R *.lfm}
{ Tloginform }
procedure ThreadDLL.LoadingLib(const ProcName: ansistring; ProcQuery: array of string);
var
MyHandle: TLibHandle;
DLLFunc: TDLL;
DataStatus: boolean;
DataResult: TMemoryStream;
begin
MyHandle := SafeLoadLibrary('myfunction.dll');
if MyHandle<>0 then
begin
DLLFunc := TDLL(GetProcedureAddress(MyHandle,ProcName)); //ProcName 'GetSomething'
if Assigned(DLLFunc) then
begin
DataStatus := DLLFunc(ProcQuery, DataResult);
if (DataStatus = True) then
begin
//Whatever
end
else
begin
//Whatever;
end;
end;
DataResult.Free;
FreeLibrary(MyHandle);
end
else
begin
FreeLibrary(MyHandle);
ShowMessage('myfunction.dll library not found');
end;
exit;
end;
procedure ThreadDLL.Execute;
begin
if not Terminated then
begin
Synchronize(@LoadingLib); // <-- I want to pass paramaters here like ex. Synchronize(@LoadingLib(ProcName, ProcQuery))
exit;
end;
end;
procedure ThreadDLLExec;
var
DLLExec: ThreadDLL;
begin
DLLExec := ThreadDLL.Create(False);
DLLExec.FreeOnTerminate := True;
exit;
end;
............ more codes
I want to pass paramaters at Synchronize(@LoadingLib) with Synchronize(@LoadingLib(ProcName, ProcQuery)) , but it not possible because Synchronize does'nt recognize it.
Then, I was found a good article about synchronize and queue with parameters here
http://www.uweraabe.de/Blog/2011/01/30/synchronize-and-queue-with-parameters/. It was Delphi. Which we can use:
Synchronize(
procedure
begin
CallMyProgress(PercentComplete);
end);
My question is:
It is possible at Lazarus? How?I appreciate any help. Many thanks