【问题标题】:VirtualBox COM API from C#来自 C# 的 VirtualBox COM API
【发布时间】:2009-07-14 15:04:51
【问题描述】:

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

【问题讨论】:

    标签: c# com interop virtualbox


    【解决方案1】:

    这是一个解释您的异常的链接:MSDN reference

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

    不幸的是,您将不得不编辑您的 COM 库,超出 tlbimp 吐出的内容...

    【讨论】:

    • IMachine 不是 IDispatch。我将从 C++ 开始,从 IDL 开始。
    【解决方案2】:

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

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

    【讨论】:

    • 很遗憾,Sysarray 没有提供修复。
    猜你喜欢
    • 2012-03-29
    • 2011-01-21
    • 2012-01-04
    • 2012-06-30
    • 2010-10-24
    • 2010-10-13
    • 2012-04-16
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多