سؤال

وأنا أحاول السيطرة على آخر صن فيرتثلبوإكس عبر انها واجهة COM من بيثون. ولكن، للأسف، التعليمة البرمجية التالية لا تعمل:

import win32com.client
VBOX_GUID = "{B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F}"
try :
  oVbox = win32com.client.Dispatch( VBOX_GUID )
  oVbox.FindMachine( "kubuntu" )
except Exception as oEx:
  print str( oEx )

والخطأ هو عام "(-2147467262، 'لا يوجد واجهة مثل معتمد"، لا شيء، لا شيء) " ويبدو أن الجزء الخطأ هو تسليم COM بلدي عن طريق بيثون. يمكن لأي شخص أن إسقاط الشكل وتوحي بعض الشيء الواضح أفعله خطأ؟

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

المحلول

والمشكلة هي أن الكائن إرجاعها بواسطة FindMachine("kubuntu") لا يدعم IDispatch interface، وwin32com لا يدعم ذلك.

هل يمكن استخدام حزمة بلدي comtypes http://starship.python.net/crew/ theller / comtypes / للحصول على ذلك، ولكن تحتاج إلى تصحيح الإصدار في مستودع والعمل على انجاحه مع المكتبات نوع فيرتثلبوإكس.

إليك جلسة العرض:

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from comtypes.client import CreateObject
>>> box = CreateObject("VirtualBox.VirtualBox")
>>> m = box.FindMachine("Fedora")
>>> print m.State
4
>>> print m.CpuCount
1
>>> print m.Name
Fedora
>>>

وهنا التصحيح التي تحتاجها:

Index: automation.py
===================================================================
--- automation.py   (revision 507)
+++ automation.py   (working copy)
@@ -753,6 +753,8 @@
     c_float: VT_R4,
     c_double: VT_R8,

+    c_ulonglong: VT_I8,
+
     VARIANT_BOOL: VT_BOOL,

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