В настоящее время у меня есть метод 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);
Любые предложения о том, что эквивалент [in] SAFEARRAY(long) bid
должно быть для класса, реализующего интерфейс C #.
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);
};
Других решений пока нет …