代码之家  ›  专栏  ›  技术社区  ›  Aidan Ryan natdico

来自C的virtualbox COM API#

  •  2
  • Aidan Ryan natdico  · 技术社区  · 15 年前

    我正在尝试使用来自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();
    

    我怎样才能正确地接到马歇尔的电话?

    2 回复  |  直到 15 年前
        1
  •  2
  •   jonathanpeppers    15 年前

    以下是一个解释您的例外情况的链接: MSDN reference

    你的问题点很可能是saferraysubtype,imachine是idispatch吗?varenum中有更多用于iunknown等的选项。

    不幸的是,你将不得不编辑你的COM库超出了TLBIMP所吐出的内容…

        2
  •  1
  •   jonathanpeppers    15 年前

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

    运行TLBIMP?要了解一些情况,值得一试的是/sysarray,它对数组进行不同的封送处理,可能会解决您的问题。