【发布时间】:2020-08-09 16:14:56
【问题描述】:
我有这个签名的 C 函数:
void updateCaseFile( char scalarFields[][100], uint nscalars, char vectorFields[][100], uint nvectors, uint* timeList, uint ntimes );
在我的特殊情况下,在 C 中,我通过了:
char scfields[2][100] = {"rho", "T"};
char vfields[1][100] = {"U"};
updateCaseFile(scfields, 2, vfields, 1, timeList, nwrite);
在 Linux 系统中,我想使用 ctypes 从 Python 传递 scfields 和 vfields,所以我使用 ctypes.c_char_p 如下:
import ctypes
libbio = ctypes.CDLL('/home/lib/libio.so')
updateCaseFile = libbio.updateCaseFile
scfields = ["rho" , "T" ]
scfields_array = (ctypes.c_char_p * (len(scfields)+1))()
vfields = ["U"]
vfields_array = (ctypes.c_char_p * (len(vfields)+1))()
updateCaseFile(scfields, 2, vfields, 1, timeList, nwrite)
但我收到此错误:
ArgumentError: argument 1: : 不知道如何转换参数 1
使用 numpy 更改代码
import numpy as np
scfields = np.chararray((1, 2))
scfields = ('rho' , 'T' )
vfields = np.chararray((1, 1))
vfields = ('U')
scfields_p = scfields.ctypes.data_as(c_wchar_p)
vfields_p = vfields.ctypes.data_as(c_wchar_p)
updateCaseFile(scfields, 2, vfields, 1, timeList, nwrite)
我再次收到此错误:
ArgumentError: argument 1: : 不知道如何转换参数 1
我知道在第二种情况下哪个 scfields 在元组中转换,但我找不到问题所在。 如何解决这个问题?
谢谢
【问题讨论】:
标签: arrays pointers ctypes google-colaboratory