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'})