Type
Test = class
end;
TestIpl = class (Test)
end
然后我创建对象:
obj = TestIpl.Create();
BeginThread(nil, 0, @mtd, obj, 0, Threadinfo.ThreadId);
在method:mtd中,我想使用created object,所以我将其转换为:
var
obj: Test;
begin
obj := Test(DataParameter);
我做得对吗,但更重要的是。能这样做吗?
我很担心将指针投射到其原始对象的行。这样行吗?
目前,当我想在testIpl中使用重载方法时,我得到AV。
编辑
function mtd(DataParameter: Pointer): DWORD; stdcall;
测试用例
unit Unit2;
interface
Type
Test = class
protected
function Test(): Integer; virtual;
end;
TestIpl = class (Test)
protected
function Test(): Integer; override;
end;
procedure TestCase;
implementation
function RunThread(Parameter: Pointer): Integer;
var
x: Test;
Rslt: Integer;
begin
x := Test(Parameter);
Rslt := x.Test();
end;
procedure TestCase;
var
test: TestIpl;
ThreadId: Cardinal;
begin
test := TestIpl.Create;
BeginThread(nil, 0, Addr(RunThread), Addr(test), 0, ThreadId);
end;
{ Test }
function Test.Test: Integer;
begin
Result := 1;
end;
{ TestIpl }
function TestIpl.Test: Integer;
begin
Result := 2;
end;
end.