0

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

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 时,除了第一个成员之外,结构成员不会更新。我是否传递或接收任何错误的值?请让我知道我的代码中的任何错误,谢谢。

4

1 回答 1

0

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

于 2019-03-23T05:45:22.830 回答