我正在尝试使用C#中的VirtualBox COM API(VBoxC.dll)。我跑了
tlbimp VirtualBox.tlb
针对VirtualBox SDK中包含的typelib。引用输出程序集构建正常但在运行时我每次尝试访问返回数组的属性时都会得到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();
如何才能正确接听此号码?
答案 0 :(得分:2)
以下是解释您的例外情况的链接:MSDN reference
您的问题点很可能是SafeArraySubType,IMachine是IDispatch吗? VarEnum中有更多选项可用于IUnknown等。
不幸的是,除了tlbimp吐出的内容之外,您还必须编辑COM库...
答案 1 :(得分:1)
您可以使用tlbimp尝试一些命令行选项。
运行tlbimp /?看一些,一个值得尝试的是/ sysarray,这个编组的数组不同,可以解决你的问题。