我正在尝试使用 C# 中的 VirtualBox COM API (VBoxC.dll)。我跑了

tlbimp VirtualBox.tlb

针对 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();

我怎样才能正确地接到 marshall 的电话?

有帮助吗?

解决方案

这是解释您的例外情况的链接: MSDN 参考

您的问题点很可能是 SafeArraySubType,IMachine 是 IDispatch 吗?VarEnum 中有更多选项用于 IUnknown 等。

不幸的是,你必须编辑你的 COM 库,超出 tlbimp 吐出的内容......

其他提示

有一些命令行选项,你可以用TLBIMP尝试。

运行TLBIMP /?看到几个,一个值得一试的是/ sysarray,这种不同的老帅阵列和可能解决您的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top