首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在BeginThread方法中传递指向对象的指针

在BeginThread方法中传递指向对象的指针
EN

Stack Overflow用户
提问于 2018-08-22 10:40:06
回答 1查看 220关注 0票数 0

我有一些基本课程,如:

代码语言:javascript
复制
Type
Test = class

end;

TestIpl = class (Test)

end

然后创建对象:

代码语言:javascript
复制
obj = TestIpl.Create();

现在,我想将这个对象传递给BeginThread,它如下所示:

代码语言:javascript
复制
BeginThread(nil, 0, @mtd, obj, 0, Threadinfo.ThreadId);

在方法: mtd中,我希望使用已创建的对象,因此我按如下方式进行转换:

代码语言:javascript
复制
var 
  obj: Test;
begin
obj :=  Test(DataParameter);

我做得对吗,但更重要的是。可以这样做吗?我很担心这一行,它将指针投射到它的原始对象。这样行吗?

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

编辑

代码语言:javascript
复制
function mtd(DataParameter: Pointer): DWORD; stdcall;

测试用例

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 11:21:47

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

代码语言:javascript
复制
function mtd(Parameter: Pointer): Integer;

或者,如果您总是将一个Test后代传递给它,您只需将其声明如下:

代码语言:javascript
复制
function mtd(Obj: Test): Integer;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51965022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档