-1

現在、ITypeLib で表示したときに次のパラメーターを持つインターフェイスに C# メソッドがあります。

HRESULT _stdcall SomeMethod ([in] Is_interface* inst, 
           [in] SAFEARRAY(long) bid);

上記のメソッドはインターフェイスにあり、C# で定義されています。タイプ ライブラリを生成した後、C++ でそのインターフェイスの実装を作成しようとしています。ただし、必要なタイプがわかりません

[in] SAFEARRAY(long) bid

私は現在、このようなことを試みています

virtual HRESULT STDMETHODCALLTYPE SomeMethod (Is_interface* inst, CComSafeArray<long> bid);

[in] SAFEARRAY(long) bidC# インターフェイスを実装するクラスに相当するものについての提案。

4

1 に答える 1

3

SAFEARRAY は、配列の既定の相互運用型です。単純な int[] だけで十分です。例えば:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface IFoo {
    void Method(object inst, int[] array);
}

OleView.exe の File + View TypeLib コマンドで取得した、次のタイプ ライブラリ エントリを生成します。

[
  odl,
  uuid(2380B019-1E69-386E-BB6E-ECEF45257086),
  version(1.0),
  dual,
  oleautomation,
  custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "ClassLibrary1.IFoo")    

]
interface IFoo : IDispatch {
    [id(0x60020000)]
    HRESULT Method(
                    [in] VARIANT inst, 
                    [in] SAFEARRAY(long) array);
};
于 2013-03-18T22:07:35.937 に答える