DCOM テクノロジで使用するインターフェイスがあります。
インターフェイスで定義されたすべてのメソッドにはsafecall
ディレクティブがあります。
ただし、クライアント側では、このオブジェクトを TObject に反映させて、読み取りが必要になるたびにインターフェイスを通過しないようにしたいと考えています。
例えば
IMyInterface = interface(IDispatch);
procedure Set_fA(const Value: WideString); safecall;
function Get_fA: WideString; safecall;
end;
このインターフェースは によって実装されます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 で使えるのですが、このままだと何か問題が発生するのでしょうか?
cdeclの代わりにsafecallがすべての違いを生む場合はありますか?
私がこれを行っている理由は、いくつかのTMyAuto
インスタンス プロパティを読み取る必要があるたびにサーバーへの転送を避けたいからです。