我有一个可以通过 DCOM 技术使用的界面。
接口中定义的所有方法都有safecall
指令。
但是,在客户端,我想将此对象反映在 TObject 中,以避免每次需要读取它们时与接口进行传输。
例如
IMyInterface = interface(IDispatch);
procedure Set_fA(const Value: WideString); safecall;
function Get_fA: WideString; safecall;
end;
该接口由 a 实现TAutoIntfObject
,在本例中为实现 keepsafecall
指令
TMyAuto = class(TAutoIntfObject, IMyInterface)
private
fA : WideString;
public
procedure Set_fA(const Value: WideString); safecall;
function Get_fA: WideString; safecall;
end;
但是现在,使用 TObject 如果我删除了 safecall:
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和safecall,如果我保持这种方式会有什么问题吗?
在任何情况下,safecall 会比 cdecl 更重要吗?
我这样做的原因是因为我想避免每次需要读取一些TMyAuto
实例属性时都传输到服务器。