我有这个测试程序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;
如果是程序或不安全,那就可以了: - (
答案 0 :(得分:5)
现在我自己试了一下,然后查看了代码,我的结论就是有一个bug。 RTTI单元确实尝试执行safecall
方法重写。它似乎弄错了。我建议您将项目作为质量控制报告提交,并使用stdcall
使用HRESULT
返回值来解决问题。