先来代码:
procedure Tfrmapi.Button1Click(Sender: TObject);
var
ID: THandle;
begin
CreateThread(nil, 0,@myfun, nil, 0,ID);
end;function tfrmapi.MyFun(p: Pointer): Integer; stdcall;
var
i: Integer;
begin
for i := 0 to 500000 do
begin
frmapi.Canvas.Lock;
frmapi.Canvas.TextOut(10, 10, IntToStr(i));
frmapi.Canvas.Unlock;
end;
Result := 0;
end;报错地方:CreateThread(nil, 0,@myfun, nil, 0,ID);
[Error] ufrm2api.pas(36): Variable required线程CreateThreadVariable required多delphi
procedure Tfrmapi.Button1Click(Sender: TObject);
var
ID: THandle;
begin
CreateThread(nil, 0,@myfun, nil, 0,ID);
end;function tfrmapi.MyFun(p: Pointer): Integer; stdcall;
var
i: Integer;
begin
for i := 0 to 500000 do
begin
frmapi.Canvas.Lock;
frmapi.Canvas.TextOut(10, 10, IntToStr(i));
frmapi.Canvas.Unlock;
end;
Result := 0;
end;报错地方:CreateThread(nil, 0,@myfun, nil, 0,ID);
[Error] ufrm2api.pas(36): Variable required线程CreateThreadVariable required多delphi
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm11 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form11: TForm11;implementation{$R *.dfm}function MyFun(p: Pointer): Integer; stdcall;
var
i: Integer;
begin
for i := 0 to 500000 do
begin
Form11.Canvas.Lock;
Form11.Canvas.TextOut(10, 10, IntToStr(i));
Form11.Canvas.Unlock;
end;
Result := 0;
end;procedure TForm11.btn1Click(Sender: TObject);
var
ID: THandle;
begin
CreateThread(nil, 0,@myfun, nil, 0,ID);
end;end.
去掉TFrmAPI,即不要声明成类的成员函数,线程的回调函数不允许为类成员。