C#의 VirtualBox COM API
-
13-09-2019 - |
문제
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();
이 전화를 마샬로 올바르게 얻으려면 어떻게해야합니까?
해결책
다음은 예외를 설명하는 링크입니다. MSDN 참조
문제 지점은 아마도 Safearraysubtype 일 가능성이 높으며 Imachine은 Idispatch입니까? iunknown 등 Varenum에는 더 많은 옵션이 있습니다.
불행히도 TLBIMP가 뱉어내는 것 이상으로 COM 라이브러리를 편집해야합니다 ...
다른 팁
tlbimp로 시도 할 수있는 몇 가지 명령 줄 옵션이 있습니다.
tlbimp /? 몇 가지를 보려면 /sysarray의 가치가 있습니다.이 마샬은 다르게 배열되어 문제를 해결할 수 있습니다.
제휴하지 않습니다 StackOverflow