15

我有这个测试程序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;

如果它是过程或不是安全调用,那么没关系:-(

4

1 回答 1

5

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

于 2013-02-21T07:32:44.600 回答