简而言之:我正在尝试调用基于 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