سؤال

أحاول استخدام Api VirtualBox COM (VBoxc.dll) من C #. هرب

tlbimp VirtualBox.tlb

ضد Typelib المضمنة في 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();

كيف يمكنني الحصول على هذه الدعوة إلى مارشال بشكل صحيح؟

هل كانت مفيدة؟

المحلول

إليك رابط يشرح استثناءك: مرجع MSDN.

المشكلات الخاصة بك هو الأكثر احتمالا safearraysubtype، هو imachine idispatch؟ هناك المزيد من الخيارات في فارينوم ل Iunknown، إلخ.

لسوء الحظ، سيتعين عليك تحرير مكتبة COM الخاصة بك بعد ما يبصق Tlbimp ...

نصائح أخرى

هناك بعض خيارات سطر الأوامر يمكنك محاولة مع Tlbimp.

تشغيل tlbimp /؟ لرؤية عدد قليل، يستحق المرء المحاولة هو / Sysarray، هذه المناجم صفائف بشكل مختلف وقد يحل مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top