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

2023-12-05

我需要使用以下接口定义(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() 才能正常工作?我尝试了不同的方法,但第二个参数总是“类型不匹配”(IFrameBuffer 的 [out])


既然这些是输出参数,你不能简单地执行以下操作吗?

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

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

它们表明语法应该像上面那样。他们还提到使用 用于 COM 对象的 MakePy:

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

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

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

  • 对高级参数类型有更好的支持,具体来说,COM 声明为 BYREF 的参数只能与 MakePy 支持的对象一起使用。我们将在本章后面讨论传递参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python win32 com:如何处理“out”参数? 的相关文章

随机推荐