Python win32 com:如何处理'out'参数?

gri*_*yvp 5 python com

我需要使用以下接口定义(idl)访问第三方COM服务器:

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

如您所见,它通过[out]参数修改器返回3个值.如何通过python win32 COM api处理这个?例如,我创建一个对象并从中获取IDisplay:

object = win32com.client.Dispatch( "VirtualBox.VirtualBox" )
display = object.display
Run Code Online (Sandbox Code Playgroud)

如何调用display.getFrameBuffer()以便它可以工作?我尝试了不同的方法,但在第二个参数上总是"类型不匹配"(IFrameBuffer的[out])

And*_*ler 8

由于那些是参数,你不能简单地做以下几点吗?

Framebuffer, XOrigin, YOrigin = display.getFrameBuffer(ScreenId)
Run Code Online (Sandbox Code Playgroud)

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

并且它们表明语法应该如上所述.他们还提到使用MakePy for COM对象:

使用MakePy有很多很好的理由:(从书中复制)

  • 对于MakePy模块支持的对象,自动化对象的Python接口更快.

  • 由类型库定义的任何常量都可供Python程序使用.我们将在本章后面更详细地讨论COM常量.

  • 对高级参数类型有更好的支持,特别是COM声明的参数作为BYREF只能用于支持MakePy的对象.我们将在本章后面讨论传递参数.