2

我正在尝试使用 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?

4

2 回答 2

2

这是解释您的异常的链接:MSDN 参考

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

不幸的是,除了 tlbimp 吐出的内容之外,您将不得不编辑您的 COM 库......

于 2009-07-14T17:09:29.770 回答
1

您可以使用 tlbimp 尝试一些命令行选项。

运行 tlbimp /? 看看一些,值得一试的是 /sysarray,它以不同的方式编组数组,可能会解决您的问题。

于 2009-07-14T15:41:02.443 回答