先来代码:
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 requireddelphi

解决方案 »

  1.   

    unit Unit11;interfaceuses
      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.
      

  2.   

    tfrmapi.MyFun(p: Pointer): Integer; stdcall;改成MyFun(p: Pointer): Integer; stdcall;,
    去掉TFrmAPI,即不要声明成类的成员函数,线程的回调函数不允许为类成员。