首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用接口的safecall函数方法进行RTTI调用?

如何使用接口的safecall函数方法进行RTTI调用?
EN

Stack Overflow用户
提问于 2013-02-21 14:40:02
回答 1查看 813关注 0票数 15

我有一个测试程序https://gist.github.com/real-mielofon/5002732

代码语言:javascript
复制
  RttiValue := RttiMethod.Invoke(RttiInstance, [10]);

和带有接口的简单单元:

代码语言:javascript
复制
unit Unit163;

interface

type
{$M+}
  ISafeIntf = interface
    function TestMethod(aI: integer): integer; safecall;
  end;
{$M-}
 type
   TSafeClass = class(TInterfacedObject, ISafeIntf)
   public
     function TestMethod(aI: integer): integer; safecall;
   end;

implementation

function TSafeClass.TestMethod(aI: integer): integer;
begin
  result := aI+1; // Exception !!
end;

end.

我穿上了卡波姆

代码语言:javascript
复制
result := aI+1;

如果它是过程或不安全的调用,那么它是正常的:-(

EN

回答 1

Stack Overflow用户

发布于 2013-02-21 15:32:45

现在我自己尝试过了,并查看了代码,我的结论是有一个bug。RTTI单元确实尝试执行safecall方法重写。它似乎就是搞错了。我建议您以QC报告的形式提交您的项目,并通过使用带有HRESULT返回值的stdcall来解决此问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14996078

复制
相关文章

相似问题

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