小编Dan*_* Ki的帖子

如何将二维数组从 Python 传递给 C?

我正在尝试使用 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 我做错了什么,我该如何解决?

c python arrays ctypes pointers

5
推荐指数
1
解决办法
1284
查看次数

标签 统计

arrays ×1

c ×1

ctypes ×1

pointers ×1

python ×1