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'})
python 定义C++结构体缓冲区
最新推荐文章于 2024-06-30 11:15:46 发布