c与python内存传递_python - 从Python向C ++传递COM指针数组 - 堆栈内存溢出

我已经阅读了许多文档,示例和StackOverflow主题,但仍然无法正常工作! 我正在为我的C ++ COM对象编写一个Python接口。 这不是我第一次这样做。 过去,我已经成功地使用comtypes获取单个接口指针,并将它们传递给我的COM类,但是这次我需要将一个指针传递给接口指针数组。

我需要调用的COM接口:

STDMETHOD(ExportGeopackage)([in] IMap* pMap,

[in] imageFormatType imageFormat,

[in] long imageQuality,

[in] long zoomMin,

[in] long zoomMax,

[in] IFeatureLayer** attributeExportLayers,

[in] BSTR title,

[in] BSTR description,

[in] BSTR saveToPath,

[in] ITrackCancel* pTrackCancel);

attributeExportLayers参数应该是指向IFeatureLayer指针的以N结尾的C数组的指针。 ExportGeopackage()已通过C ++客户端测试。 我正在编写第一个Python客户端。

在Python中:

# append a null pointer to the list of comtypes IFeatureLayer pointers

exportLayers.append(comtypes.cast(0, comtypes.POINTER(esriCarto.IFeatureLayer)))

# create ctypes array and populate

PointerArray = ctypes.c_void_p * len(exportLayers)

pointers = PointerArray()

for i in range(len(exportLayers)):

pointers[i] = exportLayers[i]

# export is comtypes interface pointer acquired earlier

export.ExportGeopackage(map, format, quality, min, max,

ctypes.cast(pointers, ctypes.POINTER(esriCarto.IFeatureLayer)),

title, desc, geopackage_path, 0)

比较exportLayer和pointers变量内容的Python转储,可以显示指针值已成功从前者转移到后者。 这些指针的Python测试成功。 但是,当我调试ExportGeopackage()时,由attributeExportLayers指向的内存与预期的IFeatureLayer指针数组不相似。 它看起来像是单个指针(指向错误的位置),后跟一长串的空指针。 考虑到Python指针变量可能已被垃圾回收,我在调用ExportGeopackage()之后添加了对指针的引用。 这没什么区别。

我是否以某种方式插入了更高级别的间接寻址,或者插入的间接寻址不足? 我很迷惑

TIA寻求任何帮助(或猜测)。 艾伦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值