Как я делаю RTTI-вызов с помощью функции функции safecall для интерфейса?
У меня есть эта тестовая программа 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
Теперь, попробовав это сам, и посмотрел на код, я пришел к выводу, что есть ошибка. Блок RTTI действительно пытается выполнить перезапись метода safecall
. Кажется, это неправильно. Я рекомендую вам представить свой проект в качестве отчета о контроле качества и обход проблемы, используя stdcall
с возвращаемыми значениями HRESULT
.