我需要使用以下接口定义(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])
由于那些是参数,你不能简单地做以下几点吗?
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的对象.我们将在本章后面讨论传递参数.
归档时间: |
|
查看次数: |
2833 次 |
最近记录: |