【发布时间】:2021-04-25 23:27:16
【问题描述】:
我正在尝试创建一个结构以在提供的 C 库 (DLL) 中使用, 如何定义以下结构(在文档中给出)?
#define A 10
#define B 20
typedef struct
{
int32_t size;
int32_t num;
char buf1[A][B];
char buf2[A][B];
char buf3[A][B];
} INSTRUCT;
我尝试使用 ctypes 在 python 中定义它是这样的:
from ctypes import*
char_buff1 = ((c_char * 10) * 20)
char_buff2 = ((c_char * 10) * 20)
char_buff3 = ((c_char * 10) * 20)
class INSTRUCT(Structure):
_fields_=[("size",c_int32),("num",c_int32),("buf1",char_buff1),("buf2",char_buff2),("buf3",char_buff3)]
int32_t 可以在 ctypes 中替换为 c_int_32 吗?
定义结构的方法是否正确?
然后我尝试将结构的指针提供给 DLL 函数并检查它返回的内容,如下所示:
dlllib = CDLL("some.dll")
somefunction = dlllib.some_function
somefunction.argtypes = [POINTER(INSTRUCT)]
INSTRUCT().size
INSTRUCT().num
print(np.ctypeslib.as_array(INSTRUCT().buf1))
但是,我只能返回 0 并且没有被函数修改——等于在 C 函数调用之前定义的那个。
我不确定问题发生在哪个阶段,但是,没有错误,代码正常执行。 不幸的是,我没有可用的 C 代码,只有函数的输入参数。
最好的问候
【问题讨论】:
标签: python c function structure ctypes