在python / pywin32中使用IUnknown派生的接口

问题描述 投票:0回答:0

简而言之:我正在尝试调用基于 IUknown 的接口中的方法。我有一些零件,但它们没有连接。

情况:

o1 = win32com.client.Dispatch("SomeProgId")
o2 = o1.SubObject

子对象不可共同创建,

o2._ole_obj_
是一个`,正如预期的那样。

o2
还支持另一个接口
IMyInterface
,派生形式
IUnknown
,我想调用该接口上的方法。

以下:

iid = pywintypes.IID("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}") // IMyInterface iid
o2._oleobj_.QueryInterface(iid)

失败

TypeError: There is no interface object registered that supports this IID

Queryinterface 调用本身成功(我已经在 COM 对象的源代码中验证了这一点),如果我指定了不受支持的 IID,则错误消息会有所不同。即使没有尝试评估结果,调用也会失败。


好吧,所以我开始了解 python 中的早期绑定支持。文档似乎参差不齐且过时(或者我错过了什么?)

以下成功:

tlb = comtypes.client.GetModule(r"path-to-dll")
x = tlb.IMyInterface()

当然 x 不可用,但智能感知显示了 x 的正确方法等。 一般来说,智能感知会显示类型库中的所有元素,因此该部分似乎可以工作。

我也尝试过:

myitf = win32com.client.CastTo(o2._oleobj_, 'IMyInterface')

失败了

没有名为“win32com.gen_py.x0x2x4.IMyInterface”的模块 在处理上述异常的过程中,又出现了一个异常: 回溯(最近一次调用最后一次): 文件“…\Python312-32\Lib\site-packages\win32co

python com pywin32 win32com
© www.soinside.com 2019 - 2024. All rights reserved.