Python的Win32的COM:如何处理“出去”参数?(Python win32 com : ho

2019-07-29 10:01发布

我需要以下的接口定义(IDL)来访问第三方COM服务器:

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

正如你所看到的,它返回通过[OUT]参数变质剂3个值。 如何通过Python的Win32 COM API处理呢? 例如,我创建了一个对象,并从中得到IDisplay:

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

如何调用display.getFrameBuffer(),所以它是否行得通呢? 我曾尝试不同的方式,但它总是在第二个参数“类型不匹配”([OUT]为IFrameBuffer)

Answer 1:

因为这些是输出参数,不能你根本就以下?

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

有一些很好的参考Python编程在Win32第12章高级Python和COM

他们表明,语法应该是像上面。 他们还提到使用MakePy COM对象:

有两种使用了一些很好的理由MakePy:(从书上抄)

  • Python的接口自动化对象是由MakePy模块支持的对象更快。

  • 由类型库中定义的任何常量提供给Python程序。 我们更详细地本章的后面讨论COM常数。

  • 有作为BYREF只能MakePy支持对象可用于高级参数类型,具体而言,通过COM申报参数更好的支持。 我们讨论本章稍后传递参数。



Answer 2:

使用makepy模块,调用它,如下所示:

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

一个窗口将与类型库的列表中打开。 滚动到“虚拟框类型库”并选择它,然后单击“确定”。 甲Python模块将在其上打印出一个位置(通常被创建%TEMP%\gen_py\2.x\ )。

生成的类会自动使用win32com.client.Dispatch ,但如果你需要它明确可以在经由功能访问win32com.client.gencache模块。



文章来源: Python win32 com : how to handle 'out' parameter?
标签: python com