Python调用带VARIANT指针参数的C++ COM函数无法获取返回值如何解决
解决方法
你当前的COM调用已经执行成功(返回True可验证),问题出在没有正确读取pywin32的VARIANT对象存储的实际返回值,不需要调整传参逻辑,只需修改取值方式即可。
核心修改点
win32com.client.VARIANT对象的实际存储值保存在其value属性中,调用完成后直接读取该属性即可拿到返回的源名称。
修改后完整代码
import win32com.client import pythoncom xmpmapPath = r"C:\LM.Irradiance.1.xmp" XMPViewer = win32com.client.Dispatch("XMPViewer.Application") # 启动实例 XMPViewer.OpenFile(xmpmapPath)# 打开XMP文件 iNbSource = XMPViewer.ExtendedGetNbSource # 返回源的数量 for sourceindex in range(0, iNbSource): # 初始化引用类型VARIANT sSourceName = win32com.client.VARIANT(pythoncom.VT_VARIANT | pythoncom.VT_BYREF, None) RetVal = XMPViewer.ExtendedGetSourceName(sourceindex, sSourceName) if RetVal: # 读取VARIANT内存储的实际返回值 print(f"源{sourceindex}名称:{sSourceName.value}") else: print(f"读取源{sourceindex}失败")
可选优化方案
如果上述方法仍无法读取到正确值,可预生成COM组件的类型库绑定代码,避免动态绑定的兼容性问题:
- 打开Python环境的
Scripts目录,运行python pywin32\client\makepy.py - 在弹出的COM组件列表中选择XMPViewer相关的类型库,生成绑定代码后重新运行脚本即可。
内容的提问来源于stack exchange,提问作者Charly23
相关产品推荐
相关产品推荐

