У меня есть интерфейс для использования по технологии DCOM.
Все методы, определенные в интерфейсе, имеют директиву safecall
.
Однако на стороне клиента я хочу отразить этот объект в TObject, чтобы избежать перехода через интерфейс каждый раз, когда мне нужно их прочитать.
Например
IMyInterface = interface(IDispatch);
procedure Set_fA(const Value: WideString); safecall;
function Get_fA: WideString; safecall;
end;
Этот интерфейс реализуется директивой TAutoIntfObject
, в данном случае реализация сохраняет директиву safecall
.
TMyAuto = class(TAutoIntfObject, IMyInterface)
private
fA : WideString;
public
procedure Set_fA(const Value: WideString); safecall;
function Get_fA: WideString; safecall;
end;
Но теперь с TObject, если я удалю безопасный вызов:
TMyObject = class(TObject, IMyInterface)
private
fA : WideString;
public
procedure Set_fA(const Value: WideString); //??
function Get_fA: WideString; //??
procedure CopyFromServer(Original: OleVariant);
end;
Компилятор выдает следующую ошибку: "Объявление Set_fA отличается от объявления в интерфейсе IMyObject"
Обычно я могу использовать TObject с безопасным вызовом, не будет ли проблем, если я буду продолжать в том же духе?
Есть ли случай, когда безопасный вызов имеет значение, а не cdecl?
Причина, по которой я это делаю, заключается в том, что я хочу избежать перехода на сервер каждый раз, когда мне нужно прочитать некоторые свойства экземпляра TMyAuto
.