VirtualBox COM API из C # - PullRequest
       15

VirtualBox COM API из C #

2 голосов
/ 14 июля 2009

Я пытаюсь использовать VirtualBox COM API (VBoxC.dll) из C #. Я побежал

tlbimp VirtualBox.tlb

против typelib, включенного в VirtualBox SDK. Ссылка на выходные сборки сборки в порядке, но во время выполнения я получаю SafeArrayTypeMispatchException («Указанный массив не соответствует ожидаемому типу») всякий раз, когда я пытаюсь получить доступ к свойствам, возвращающим массивы.

Я вижу, например, что IVirtualBox.get_Machines() определяется как

[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_DISPATCH)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020009)]
public virtual extern IMachine[] get_Machines();

Как мне правильно получить этот звонок к маршалу?

Ответы [ 2 ]

2 голосов
/ 14 июля 2009

Вот ссылка, объясняющая ваше исключение: Ссылка MSDN

Скорее всего, ваша проблемная точка - SafeArraySubType, является ли IMachine IDispatch? В VarEnum есть еще опции для IUnknown и т. Д.

К сожалению, вам придется редактировать вашу COM-библиотеку сверх того, что выдает tlbimp ...

1 голос
/ 14 июля 2009

Есть несколько параметров командной строки, которые вы можете попробовать с помощью tlbimp.

Запустите tlbimp /? чтобы увидеть несколько, стоит попробовать / sysarray, этот маршал массив по-разному и может решить вашу проблему.

...