我已经阅读了许多文档,示例和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寻求任何帮助(或猜测)。 艾伦