【发布时间】:2021-02-04 22:15:38
【问题描述】:
DLL 在我的 C 代码中提供指向一维数组的指针,如下所示:
__int16 *data = Msg_RowAt(surfaceMsg, rowIdx);
//access the values like this
data[iterator]
我正在构建一个 Python 项目,我需要在其中访问同一数组的值。我尝试了以下方法,但在尝试迭代 surfaceData 时遇到访问冲突。
surfaceDataPtr = Msg_RowAt(surfaceMsg, row)
ptr = ctypes.POINTER(ctypes.c_int16)
surfaceData = ctypes.cast(surfaceDataPtr, ptr)
print("ptr: " + str(surfaceData))
print("val: " + str(surfaceData[1]))
我访问了错误的内存位置,但我不太确定我做错了什么。谁能看到我做错了什么?
【问题讨论】:
-
您可能希望使用
argtypes和restype定义Msg_RowAt的参数和返回类型。 -
事后铸造为时已晚。 64 位指针被截断,因为默认返回类型是 c_int。定义 .argtypes 和 .restype。