首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中使用ctype初始化和传递自引用结构?

如何在python中使用ctype初始化和传递自引用结构?
EN

Stack Overflow用户
提问于 2019-05-12 23:55:17
回答 1查看 264关注 0票数 0

我在C中有以下结构:

代码语言:javascript
复制
struct Entry_t{
    char *key; 
    int data_type; 
    int nbitems; 
    size_t offset; 
    int size; 
    Entry_t *pcfg;
};

以及C中的以下函数:(我最终希望初始化结构并将其从python传递给C)

代码语言:javascript
复制
int get_config(void *ctx, Entry_t* pconfig, void *pdest, char *key);

我在python中定义了相同的结构,如下所示:

代码语言:javascript
复制
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实例,如下所示:

代码语言:javascript
复制
type = Entry_t("e",3,1,5,12,POINTER(testctx))

我在创建实例时遇到此错误,

代码语言:javascript
复制
TypeError: expected LP_Entry instance, got CArgObject

如何正确初始化我的entry_t结构?

EN

回答 1

Stack Overflow用户

发布于 2019-05-13 01:35:44

代码语言:javascript
复制
type = Entry_t("e",3,1,5,12,POINTER(testctx))

当您将testctx传递给您的对象时,使用pointer()函数(小写),因为大写变体用于描述结构而不是构造对象。此外,建议不要在Python函数中隐藏内建,因此请考虑将变量从"type“重命名为其他名称。

代码语言:javascript
复制
t1 = Entry_t("e", 3, 1, 5, 12, pointer(testctx))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56100965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档