【发布时间】:2017-04-21 11:47:05
【问题描述】:
我在 Python 2.7 中有一个字符串数组,我想通过 ctypes 将其传递给 C 函数:
unsigned int SetParams(unsigned int count, const char **params)
所以我可以在python中定义参数:
import ctypes as ct
lib = ct.cdll.LoadLibrary('...')
lib.SetParams.restype = ct.c_uint
lib.SetParams.argtypes = [ct.c_uint, ct.POINTER(ct.c_char_p)]
但是现在当我在 Python 函数中获得一组参数时,我想在上面的库调用中使用它,我该如何调用它呢?我在想这样的事情:
def setParameters(strParamList):
numParams = len(strParamList)
strArrayType = ct.c_char_p * numParams
strArray = strArrayType()
for i, param in enumerate(strParamList):
strArray[i] = param
lib.SetParams(numParams, strArray)
我刚从ctypes 开始,想知道是否有更自动化的方法可以做到这一点?分配strArray[i] = param 是否实际上正在重新分配?如果是这样,这似乎相当昂贵——有没有办法将字符串指针指向 Python 分配的缓冲区,或者它们不是以 NULL 结尾的?
更新我确实浏览了几个相关的问题,但找不到直接的问题来处理相同的问题。非常感谢
【问题讨论】:
-
对于“更自动化”,您可能想看看 Cython。
标签: python c arrays string ctypes