15
我有此測試程序https://gist.github.com/real-mielofon/5002732如何使用接口的safecall函數方法進行RTTI調用?
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.
和我有
result := aI+1;
KABOOM如果它是過程或不safecall,那麼它就沒事了:-(
我知道關於「:HRESULT; stdcall」,今天唯一可用的解決方案是從源代碼刪除safecall(而且我這樣做),但也許有一個解決方案如何與RTTI合作? – Mielofon 2013-02-21 11:00:29
我不認爲你需要改變界面中的聲明。當您通過RTTI調用它時只需傳遞兩個參數,並將HRESULT作爲該調用的返回值讀取。 – 2013-02-21 11:05:57
如果我更改計數參數,則結果中有異常: 參數計數不匹配。 它是關於: RttiHResultValue:= RttiMethod.Invoke(RttiInstance,[10,RttiReturnValue]); – Mielofon 2013-02-21 11:18:21