Python 如何在ctypes结构中创建静态字符串缓冲区?
我正在尝试使用ctypes调用DLL函数。我需要向DLL函数传递一个指向C结构的指针,函数将写入该结构 C结构如下所示:Python 如何在ctypes结构中创建静态字符串缓冲区?,python,ctypes,Python,Ctypes,我正在尝试使用ctypes调用DLL函数。我需要向DLL函数传递一个指向C结构的指针,函数将写入该结构 C结构如下所示: struct foo { int a; float b; char c[40]; } 我一直在琢磨如何定义“c”。我在Python中有这样的代码: import ctypes lib = ctypes.cdll.LoadLibrary(path_to_dll) class foo(ctypes.Structure): _fields_ = [(
struct foo {
int a;
float b;
char c[40];
}
我一直在琢磨如何定义“c”。我在Python中有这样的代码:
import ctypes
lib = ctypes.cdll.LoadLibrary(path_to_dll)
class foo(ctypes.Structure):
_fields_ = [('a', ctypes.c_int),
('b', ctypes.c_float),
('c', ctypes.create_string_buffer(41))] # 41 allows for terminating zero
abc = foo()
pABC = ctypes.byref(abc)
lib.dllFunction(pABC)
print(abc.a, abc.b, abc.c)
这几乎是可行的,但我得到了TypeError:tuple(索引3)中的第二项必须是C类型
我应该如何定义结构的“c”元素?固定元素计数的c数组转换为Python ctypes,即ctypes类型(基本或结构、联合甚至数组类型)乘以元素计数 乘法的结果是一种新的数组类型,可用于e。G在结构中或在内存中创建新数组
在这里的特定情况下,
char c[40]
翻译为一种类型,以ctypes.c\u char*40
将c定义为“ctypes.c\u char*40”@MichaelButscher 40而不是41?(这很管用——做一个答案,我会投赞成票!)是的,长度与C结构中的长度相同。