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

时间:2013-02-21 06:40:02

标签: delphi delphi-xe2 rtti delphi-xe3

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

  RttiValue := RttiMethod.Invoke(RttiInstance, [10]);

带接口的简单单元:

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.

我有kaboom

result := aI+1;

如果是程序或不安全,那就可以了: - (

1 个答案:

答案 0 :(得分:5)

现在我自己试了一下,然后查看了代码,我的结论就是有一个bug。 RTTI单元确实尝试执行safecall方法重写。它似乎弄错了。我建议您将项目作为质量控制报告提交,并使用stdcall使用HRESULT返回值来解决问题。