我目前在接口中有一个C#方法,在查看时具有以下参数 ITypeLib
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);
关于实现C#接口的类应该是[in] SAFEARRAY(long) bid
的等价物的任何建议。
答案 0 :(得分: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);
};