我需要创建一个c函数,它应该从Python调用 - 使用ctypes - 并且应该为调用python函数提供一个字符串数组。我完全控制了这两种环境。
最好,它应该适用于Python 2和3。
我有这个c函数:
import ctypes
stringMaxSize = 1000
ProvideTextsMethod = loadedDll.ProvideTexts
ProvideTextsMethod.restype = ctypes.c_long
arrayType = ctypes.c_wchar_p * textCount
pyArray = arrayType()
for i in range(0, textCount):
pyArray[i] = ctypes.create_unicode_buffer(stringMaxSize) # fails here
ProvideTextsMethod.argtypes = [arrayType, ctypes.c_long, ctypes.c_long]
errorCode = ProvideTextsMethod(pyArray, textCount, stringMaxSize)
返回值是错误代码。文本是实际的数组。 textCount是数组中元素的数量。 stringMaxSize是每个字符串的最大大小。
我正在尝试在Python中分配所有内容并让c ++函数覆盖字符串。我不确定这是不是最好的方法。我认为这是最简单的方法,因为需要在Python中取消分配内存。
这是我(非工作)代码创建字符串并调用函数:
{{1}}
我收到此错误:
不兼容的类型,c_wchar_Array_1000实例而不是c_wchar_p实例
我需要改变什么?
答案 0 :(得分:1)
你需要抛出它,因为pyArray是一个c_whar_p数组:
for i in range(0, textCount):
pyArray[i] = ctypes.cast(ctypes.create_unicode_buffer(stringMaxSize), ctypes.c_wchar_p)
这有帮助吗?