मैं इस परीक्षण कार्यक्रम है 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.
और मैं
result := aI+1;
पर kaboom अगर यह प्रक्रिया है या नहीं सुरक्षित, तो यह ठीक है :-(
मुझे ": HRESULT; stdcall" के बारे में पता है और आज उपलब्ध एकमात्र समाधान स्रोत से सुरक्षित है (और मैं इसे कर रहा हूं), लेकिन हो सकता है कि आरटीटीआई के साथ काम करने का कोई समाधान हो? – Mielofon
मुझे नहीं लगता कि आपको इंटरफ़ेस में घोषणा को बदलने की आवश्यकता है। जब आप आरटीटीआई के माध्यम से इसे कॉल करते हैं तो बस दो पैरामीटर पास करें और उस कॉल के रिटर्न वैल्यू के रूप में HRESULT में पढ़ें। –
यदि मैं गिनती पैरामीटर बदलता हूं, तो मेरे पास परिणामस्वरूप अपवाद है: पैरामीटर गिनती मेल नहीं खाता है। यह लगभग है: RttiHResultValue: = RttiMethod.Invoke (RttiInstance, [10, RttiReturnValue]); – Mielofon