You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:39:02