2009-06-30 10 views
5

मैं इंटरफ़ेस परिभाषा (IDL) निम्नलिखित के साथ एक तीसरी पार्टी COM सर्वर तक पहुँचने के लिए की जरूरत है:पायथन Win32 कॉम: 'आउट' पैरामीटर को कैसे संभालें?

interface IDisplay : IDispatch 
{ 
    HRESULT getFramebuffer (
    [in] ULONG aScreenId, 
    [out] IFramebuffer * * aFramebuffer, 
    [out] LONG * aXOrigin, 
    [out] LONG * aYOrigin); 
}; 

आप देख सकते हैं, यह [बाहर] पैरामीटर modificators के माध्यम से 3 मूल्यों देता है। पाइथन Win32 COM api के माध्यम से इसे कैसे संभालें? उदाहरण के लिए, मैं एक वस्तु बना सकते हैं और इसे से IDisplay मिलती है:

object = win32com.client.Dispatch("VirtualBox.VirtualBox") 
display = object.display 

कैसे display.getFrameBuffer (कॉल करने के लिए) तो यह काम करेगा? मैंने अलग-अलग तरीकों की कोशिश की है, लेकिन यह हमेशा दूसरे तर्क ([आउट] पर IFrameBuffer के लिए 'टाइप मिस्चैच' है)

उत्तर

8

चूंकि वे आउट पैरामीटर हैं, क्या आप बस निम्न कार्य नहीं कर सकते हैं?

Framebuffer, XOrigin, YOrigin = display.getFrameBuffer(ScreenId) 

Python Programming on Win32 Chapter 12 Advanced Python and COM

में कुछ अच्छा संदर्भ नहीं है और वे संकेत मिलता है कि वाक्य रचना के ऊपर की तरह होना चाहिए।

वहाँ अच्छे कारणों की एक संख्या का उपयोग करने के कर रहे हैं MakePy: (पुस्तक से नकल)

  • वस्तुओं स्वचालन के लिए अजगर इंटरफ़ेस तेजी से वस्तुओं के लिए द्वारा समर्थित है उन्होंने यह भी COM ऑब्जेक्ट के लिए MakePy का उपयोग कर का उल्लेख एक मेकपी मॉड्यूल।

  • टाइप लाइब्रेरी द्वारा परिभाषित कोई भी स्थिरांक पायथन प्रोग्राम में उपलब्ध कराया गया है। हम अध्याय में बाद में अधिक विस्तार से COM स्थिरांक पर चर्चा करते हैं।

  • उन्नत पैरामीटर प्रकारों के लिए बहुत बेहतर समर्थन है, विशेष रूप से, COM द्वारा घोषित पैरामीटर बीईआरईएफ केवल मेकपी-समर्थित ऑब्जेक्ट्स के साथ उपयोग किया जा सकता है। हम बाद में अध्याय में पैरामीटर पारित करने पर चर्चा करते हैं।

+0

मैंने कोशिश की है, यह 'पैरामीटर की अवैध संख्या' बढ़ाता है। मुझे यकीन नहीं है कि COM सर्वर तीसरे पक्ष की है तो MakePy का उपयोग कैसे करें। यह सिस्टम पर बाइनरी और रजिस्टर्स COM सर्वर के रूप में स्थापित है। क्या यह एपीआई बदलना संभव है? – grigoryvp

3

यह लागू इस प्रकार makepy मॉड्यूल का उपयोग करें:

>>> import win32com.client.makepy as makepy 
>>> makepy.main() 

एक विंडो प्रकार पुस्तकालयों की सूची के साथ खुलेगा। "वर्चुअल बॉक्स टाइप लाइब्रेरी" पर स्क्रॉल करें और इसे चुनें, फिर "ठीक" पर क्लिक करें। एक पायथन मॉड्यूल एक स्थान पर बनाया जाएगा जो मुद्रित किया जाता है (आमतौर पर %TEMP%\gen_py\2.x\)।

जेनरेट क्लास स्वचालित रूप से win32com.client.Dispatch द्वारा उपयोग किया जाएगा, लेकिन यदि आपको इसकी आवश्यकता है तो आप इसे win32com.client.gencache मॉड्यूल में फ़ंक्शंस के माध्यम से एक्सेस कर सकते हैं।

संबंधित मुद्दे