c与python内存传递_python - 从Python向C ++传递COM指针数组 - 堆栈内存溢出
我已經(jīng)閱讀了許多文檔,示例和StackOverflow主題,但仍然無法正常工作! 我正在為我的C ++ COM對象編寫一個Python接口。 這不是我第一次這樣做。 過去,我已經(jīng)成功地使用comtypes獲取單個接口指針,并將它們傳遞給我的COM類,但是這次我需要將一個指針傳遞給接口指針數(shù)組。
我需要調(diào)用的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參數(shù)應(yīng)該是指向IFeatureLayer指針的以N結(jié)尾的C數(shù)組的指針。 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變量內(nèi)容的Python轉(zhuǎn)儲,可以顯示指針值已成功從前者轉(zhuǎn)移到后者。 這些指針的Python測試成功。 但是,當我調(diào)試ExportGeopackage()時,由attributeExportLayers指向的內(nèi)存與預期的IFeatureLayer指針數(shù)組不相似。 它看起來像是單個指針(指向錯誤的位置),后跟一長串的空指針。 考慮到Python指針變量可能已被垃圾回收,我在調(diào)用ExportGeopackage()之后添加了對指針的引用。 這沒什么區(qū)別。
我是否以某種方式插入了更高級別的間接尋址,或者插入的間接尋址不足? 我很迷惑
TIA尋求任何幫助(或猜測)。 艾倫
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的c与python内存传递_python - 从Python向C ++传递COM指针数组 - 堆栈内存溢出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理财收益不如债券基金吗?从债券基金的分类
- 下一篇: python猜数字1001untitle