2013-03-18 20 views
-1

我現在有在 的ITypeLib如何實現SAFEARRAY(long)參數?

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

上述方法中的接口和在C#。經過被定義生成類型庫我試圖觀察時,其具有以下參數的接口的C#方法在C++中創建該接口的實現。但是我想不通所需的類型

[in] SAFEARRAY(long) bid 

目前我正在試圖這樣

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

上的[in] SAFEARRAY(long) bid等價應該是什麼實現C#接口的類的任何建議的東西。

+0

我猜'LPSAFEARRAY'或'LPSAFEARRAY *'。你也可以爲此使用變體。 – 2013-03-18 21:25:16

回答

3

SAFEARRAY是數組的默認互操作類型。只是一個簡單的int []會做。例如:

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

產生此類庫條目,與OLEView.exe這類,文件+查看類型庫的命令獲得:

[ 
    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); 
};