【发布时间】:2013-07-26 20:19:08
【问题描述】:
我有一个可以通过 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 如果我删除了 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 实例属性时都传输到服务器。
【问题讨论】:
-
TMyObject 没有实现 IDispatch
标签: delphi calling-convention dcom delphi-6