在BeginThread方法中将指针传递给对象

时间:2018-08-22 10:40:06

标签: delphi delphi-7

我有如下基本类:

XXX

然后创建对象:

Type
Test = class

end;

TestIpl = class (Test)

end

现在,我想将此对象传递给BeginThread,它像这样:

obj = TestIpl.Create();

在方法:mtd中,我想使用创建的对象,因此我将其转换为:

BeginThread(nil, 0, @mtd, obj, 0, Threadinfo.ThreadId);

我正确地执行了此操作,但是更重要的是。可以这样吗? 我担心将指针投射到其原始对象的那一行。这样行吗?

当前,当我想在testIpl中使用重载方法时得到AV。 谢谢

编辑

var 
  obj: Test;
begin
obj :=  Test(DataParameter);

测试案例

function mtd(DataParameter: Pointer): DWORD; stdcall;

1 个答案:

答案 0 :(得分:3)

声明您的线程例程与TThreadFunc兼容(BeginThread要求):

function mtd(Parameter: Pointer): Integer;

或者,如果您始终向其传递Test的后代,则可以这样简单地声明它:

function mtd(Obj: Test): Integer;