python - 如何在 python 中使用 ctypes 初始化和传递自引用结构?
问题描述
我在C中有以下结构:
struct Entry_t{
char *key;
int data_type;
int nbitems;
size_t offset;
int size;
Entry_t *pcfg;
};
以及C中的以下函数:(我最终想初始化结构并将其从python传递给C)
int get_config(void *ctx, Entry_t* pconfig, void *pdest, char *key);
我在python中定义了相同的结构如下:
class Entry_t(Structure): pass
Entry_t._fields_ = [
('key', c_char_p),
('data_type', c_int),
('nbitems', c_int),
('offset', c_size_t),
('size', c_int),
('pcfg', POINTER(Entry_t)),
]
testctx = Entry_t() //initialize with empty values
我创建了 Entry_t 实例,如下所示:
type = Entry_t("e",3,1,5,12,POINTER(testctx))
创建实例时出现此错误,
TypeError: expected LP_Entry instance, got CArgObject
如何正确初始化我的 entry_t 结构?
解决方案
type = Entry_t("e",3,1,5,12,POINTER(testctx))
当您传递testctx
给您的对象时,请使用pointer()
函数(小写),因为大写变体用于描述结构而不是构造对象。此外,建议不要隐藏 Python 内置函数,因此请考虑将变量从“类型”重命名为其他名称。
t1 = Entry_t("e", 3, 1, 5, 12, pointer(testctx))
推荐阅读
- reactjs - 如何在商店中添加类型并将react-redux中的reducer与打字稿结合起来
- multithreading - 使用 cpp 在多线程程序中陷入无限循环
- android - 从伴随对象扩展数据类的函数时不可见
- python - 在 Python 中,我得到一个错误的总数,我只得到位于负数之前的正数的总数
- sql - 在 ETL 管道中执行数据提取和转换的领域特定语言
- javascript - 通过控制器后如何执行代码?
- reactjs - useReducer 钩子,如何对动作进行类型检查?
- flutter - Flutter PDF 插件:这个小部件创建了 20 多个页面。这可能是小部件或文档中的问题
- python - 基于条件的函数计算
- php - 尝试使用隐藏的 mySQL ID 获取隐藏的输入值