我正在尝试使用 ctypes 将一个二维数组从 Python 传递到 C。数组数据类型是 uint16。我写了一个简单的代码来理解它是如何工作的:
C:
#include <stdint.h>
__declspec(dllexport) uint16_t Test(uint16_t **arr)
{
return (arr[5][5]);
}
Run Code Online (Sandbox Code Playgroud)
Python:
import numpy as np
from ctypes import cdll
import ctypes
from numpy.ctypeslib import ndpointer
_p = ndpointer(dtype=np.uint16, ndim=2, shape=(10, 10), flags='C')
mydll = cdll.LoadLibrary("mydll.dll")
_func = mydll.Test
_func.argtypes = [_p]
_func.restypes = ctypes.c_uint16
data = np.empty([10, 10], dtype=np.uint16)
data[5, 5] = 5
print(_func(data))
Run Code Online (Sandbox Code Playgroud)
我收到 OSError:访问冲突读数 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 我做错了什么,我该如何解决?