Как реализовать параметр SAFEARRAY (long)?

В настоящее время у меня есть метод 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 #.

-1

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]