문제

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의 가치가 있습니다.이 마샬은 다르게 배열되어 문제를 해결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top