C# 如何实现SAFEARRAY(long)参数?
我目前在一个界面中有一个C#方法,当在中查看时,它具有以下参数 ITypeLibC# 如何实现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
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*
。您也可以为此使用变体。