Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实现SAFEARRAY(long)参数?_C#_C++_Com_Safearray - Fatal编程技术网

C# 如何实现SAFEARRAY(long)参数?

C# 如何实现SAFEARRAY(long)参数?,c#,c++,com,safearray,C#,C++,Com,Safearray,我目前在一个界面中有一个C#方法,当在中查看时,它具有以下参数 ITypeLib HRESULT _stdcall SomeMethod ([in] Is_interface* inst, [in] SAFEARRAY(long) bid); 以上方法是在接口中定义的,在生成一个类型库之后,我尝试在C++中创建那个接口的实现。但是,我无法确定所需的类型 [in] SAFEARRAY(long) bid 我现在正在尝试类似的东西 virtual HRESULT STDM

我目前在一个界面中有一个C#方法,当在中查看时,它具有以下参数 ITypeLib

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

以上方法是在接口中定义的,在生成一个类型库之后,我尝试在C++中创建那个接口的实现。但是,我无法确定所需的类型

[in] SAFEARRAY(long) bid
我现在正在尝试类似的东西

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

对于实现C#接口的类,任何关于安全数组(长)bid的等价物的建议都应该是。

安全数组是数组的默认互操作类型。只要一个简单的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);
};

我猜是
LPSAFEARRAY
还是
LPSAFEARRAY*
。您也可以为此使用变体。