使用cffi python更新结构成员

时间:2019-03-08 13:53:39

标签: python struct cffi

大家好,我有一个具有以下成员的结构

struct test {       
    uint8_t         one;      
    uint32_t        two;      
    uint8_t         three;     
    bool_t          four;   
    bool_t          five;  
    bool_t          six;                                         
    bool_t          seven;

};

我有以下python函数

from cffi import FFI
ffi=FFI()
dll = ffi.dlopen( 'test.dll')
def test_one(**kwargs ):
        p_val = ffi.new( 'struct test*' ) #create a struct using cffi
        dout = dll.test_one( p_val ) #call the func from dll
        kwargs['one'] =str( p_val.one) 
        kwargs['two '] = str( p_val.two )
        kwargs['three'] =str( p_val.three) 
        kwargs['four'] = str( p_val.four)
        kwargs['five'] = str( p_val.five)
        kwargs['six'] =str( p_val.six) 
        kwargs['seven'] = str( p_val.seven)
        print kwargs

当我打印结构成员(即kwargs)时,除第一个成员外,其他结构成员均未更新。我传递或接收任何错误的值吗? 请让我知道我的代码中有任何错误。

1 个答案:

答案 0 :(得分:0)

嗨,我遇到了问题python中的bool_t占用了1个字节,但是由于某些奇怪的原因,使用Visual Studio c ++(版本4)创建的dll中的bool_t占用了4个字节,这是因为只有很少的结构元素被更新了(运气不错) )。通过#define bool_t char解决了该问题。