{自定义一个类}
type
  TwwThread = class
    constructor Create; overload;
    destructor Destroy; override;
  private
    m_hThread: THandle;
    m_ThreadID : TThreadID;
  protected
    procedure Execute; virtual; abstract;
    class function wwThreadProc(Thread: TwwThread): Integer;
  end;
implementation
class function TwwThread.wwThreadProc(Thread: TwwThread): Integer;
begin
  Thread.Execute();
end;
constructor TwwThread.Create;
begin
  m_hThread := CreateThread(nil, 0, Pointer(@TwwThread.wwThreadProc), Pointer(Self), 0, m_ThreadID);
end;
destructor TwwThread.Destroy;
begin
  inherited;
end;
{然后调用他}
  TmyThread = class(TwwThread)
  protected
     procedure Execute; override;
  end;
var
  myThread : TmyThread;
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  myThread := TmyThread.Create;
end;
procedure TmyThread.Execute;
begin
  inherited;
  // 为什么这里会出错?
end;

解决方案 »

  1.   

    procedure Execute; virtual; abstract;??
      

  2.   


    纯虚函数吧?
    virtual void Execute() = NULL;
      

  3.   

    因为inherited关键字是调用父类的同名函数, 也就是TThread.Execute 又因为这个函数是纯虚函数, 纯虚函数调用的时候就会报错
      

  4.   

    sorry 没看仔细, 原来你是自己写的线程啊, 那么你这个类方法要改成静态方法, 或者普通过程, 并且调用约定是Stdcall的就可以了, 你试试吧
    class function wwThreadProc(Thread: TwwThread): Integer; static;  stdcall;
      

  5.   

    wwThreadProc声明的地方删掉,改成:
    function wwThreadProc(Thread: TwwThread): Integer; stdcall;
    begin
      Thread.Execute();
    end;m_hThread := CreateThread(nil, 0, @wwThreadProc, Pointer(Self), 0, m_ThreadID);因为CreateThread第3个参数,是一个函数地址但这个函数不能是某个类函数