Page 1 of 1

VirtualBox COM API from C#

Posted: 2. Oct 2009, 05:49
by forzar
I am trying to use the VirtualBox COM API (VBoxC.dll) from C#. I ran

Code: Select all

tlbimp VirtualBox.tlb
against the typelib included in the VirtualBox SDK. Referencing the output assembly builds OK but at runtime I get a SafeArrayTypeMispatchException ("Specificed array was not of the expected type") whenever I try to access properties that return arrays.

I can see, for example, that IVirtualBox.get_Machines() is defined as

Code: Select all

[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_DISPATCH)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x60020009)]
public virtual extern IMachine[] get_Machines();
How can I get this call to marshall correctly?

Re: VirtualBox COM API from C#

Posted: 3. Oct 2009, 12:59
by DEmberton
I'm not familiar with the VBox API, but I do know from doing COM in C# that tlbimp can't cover all cases. Pointers to arrays of pointers for example and it gets confused, which sounds like your problem. You may need to write some unsafe C#, or what I found easier was to write a C++ .NET wrapper and call that from C#.