Python 如何在ctypes结构中创建静态字符串缓冲区?

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_ = [(

我正在尝试使用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_ = [('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结构中的长度相同。