python 定义C++结构体缓冲区

from Scripts.structure import *
def convert_func(stuname, arr_json={}):
    '''
    stuname:  结构体名字
    arr_json: 嵌套结构体数组信息,以{key1:val1,key1:val2...}形式传入,key值是代表限制嵌套结构体数组大小的字段,val是表示嵌套结构体数组名称字段
    '''
    # 结构体中所有字段列表集合
    all_keys = []
    # 构造结构体缓冲区方法所有入参字段
    input_undefault_param = ''  # 无默认值
    input_default_param = ''  # 有默认值
    for field in stuname._fields:
        all_keys.append(field[0])
        if field[0] != 'dwSize' and field[0] != 'byreserved':
            if field[1] == c_int or field[1] == c_ubyte:
                input_default_param = input_default_param + field[0].lower() + '=1' + ','
            else:
                input_undefault_param = input_undefault_param + field[0].lower() + ','
    # 构造结构体缓冲区方法注释
    print('#构建' + stuname.__name__ + "结构体")
    # 定义构造结构体缓冲区方法函数
    print("def set_struct_" + stuname.__name__.lower() + '(' + input_undefault_param + input_default_param[:-1] + '):')
    # 定义结构体缓冲区实例
    print('    param = ' + stuname.__name__ + '()')
    # 如果结构体有dwSize字段,需要赋值其大小
    if 'dwSize' in all_keys:
        print('    param.dwSize = sizeof(' + stuname.__name__ + ')')
    # 给结构体中除了dwSize、byreserved、嵌套结构体类型数组字段赋值
    for field in stuname._fields:
        if field[0] != 'byreserved' and field[0] != 'dwSize' and field[0] not in arr_json.values():
            if field[1] != c_char:
                print('    param.' + field[0] + ' = ' + field[0].lower())
            else:
                print('    param.' + field[0] + ' = string_convert_to_bytes(' + field[0].lower()+')')
    # 给嵌套结构体类型数组字段赋值
    for arr_number in arr_json.keys():
        if arr_json[arr_number]:
            print('    for index in range(' + arr_number.lower() + '):')
            print('        param.' + arr_json[arr_number] + '[index] = ' + arr_json[arr_number].lower())


convert_func(NET_APP_STU, {'number': 'number_array', 'Number2': 'Number2_array'})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值