实现结构体与枚举返回给python
度申提供的C#封装库中的函数返回值是多种多样的,如果直接返回相应类型,在python中是接收不到的,并且会报错。但字符串和整型可以正常返回给python,一个相当然的想法就是:能不能将函数返回的结构体变成字符串,将函数返回的枚举变成整型,再返回给python?经过实践,证明确实是可行的。
C#返回结构体给python
在C#中定义如下函数:
//返回结构体字符串
public static string PrintStructValues<T>(T obj) where T : struct
{
var type = obj.GetType();
var fields = type.GetFields();
string returnstr = "";
foreach (var field in fields)
{
returnstr += field.Name + ":" + field.GetValue(obj) + "\n";
}
return returnstr;
}
通过这个函数,就可以将任意结构体转成键值对形式的字符串,方便我们以后在python中使用,对于有结构体引用类型的函数,我们会在最后返回给python的字符串中加上这段结构体字符串。
C#返回枚举给python
对于枚举类型,这个就比较方便了,直接ToString()一下,返回给python即可。
举例如下:
public static string dvpGetAeTarget(int handlePy, int refAeTargetPy)
{
uint handle = (uint)handlePy;
int refAeTarget = (int)refAeTargetPy;
return "dvpStatus:" + DVPCamera.dvpGetAeTarget(handle, ref refAeTarget).ToString() + "\n" + "int:" + refAeTarget.ToString(); }
python传结构体给C#(已废弃)
python传结构体给C#,需要用一个引用库*Newtonsoft.Json*,python中传一段Json格式的字符串,字符串的内容就是格式化好的结构体文本,然后C#中的函数接收到字符串后,再调用JsonConvert.DeserializeObject
# Python传给C#的字符串格式如下:
String = "{"Name":"zhang","Age":24}";
# C#中将接收到的字符串转成结构体的代码如下:
MyStruct myStruct = JsonConvert.DeserializeObject<MyStruct>(jsonString);
# C#中结构体类型如下:
public struct MyStruct
{
public string Name;
public int Age;
}
由于度申C#库中的结构体全部都有保留字段,且为数组形式,并定义了数组元素数量大小,这也就要求我们在python中传递结构体时,也要将这个保留字段填充好。但问题是,这些保留字段的数组元素的数量,竟高达128个,如果在python中使用,那么在传递结构体时,我们字符串中就会出现以下这种情况:
String = "{"Name":"zhang","Age":24,"保留字段":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.....等等]}";
这是无法接受的,从python传结构体给C#,在本次项目中被废弃。
解决C#中的控制台输出,在python的控制台乱码问题
在C#的库中增加下面这个函数,本方法在程序开始时只需要执行一次,就可以解决所有乱码问题。
private static void setUtf8()
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
}
自动化生成C#代码
本部分不再赘述,调试了很长时间
# // X:/软件/C#库调用测试/自动化API生成之完整流程.py
# // Copyright (c) 2023.
# // @Time : 2023/2/14 13:35:44
# // @Author : 张稚琦
# // @Address: 湖北理工学院腾龙公寓 6131
# // @Email : zhang@zhang.mba / zhangzhiqi828@gmail.com / zhangzhiqi@lh83.onmicrosoft.com / 2272358828@qq.com
# // @File : 自动化API生成之完整流程.py
# // @LastModified: 2023/2/14 下午1:35
# // @ProjectName : C#库调用测试
import re
with open('text.txt', 'r', encoding='utf-8') as f:
text = f.read()
sections = text.strip().split('\n\n')
all=""
# 输出结果
for section in sections:
# print(section)
# print('*'*50)
flag=0
inner=""
PrintStructValues=""
returnEnum=""
#提取函数名 和 形参列表
pattern = r'(\w+)\s*\((.*?)\);'
match = re.search(pattern, section)
if match:
# 提取函数名和形参变量名
func_name = match.group(1)
params = match.group(2)
# 去除空格和换行符
params = re.sub(r'\s+', '', params)
# 分割形参变量名
param_names = params.split(',')
# print('Function name:', func_name)
# print('Parameter names:', param_names)
ok_list=[]
for string in param_names:
if string.startswith("dvpStreamCallbackproc"):
continue
elif string.startswith("uint"):
string = string[4:]
ok_list.append("int "+string)
inner=inner+f"uint {string}=(uint){string}Py;"
# print(string)
elif string.startswith("float"):
string = string[5:]
ok_list.append("float "+string)
inner = inner + f"float {string}=(float){string}Py;"
elif string.startswith("char"):
string = string[4:]
ok_list.append("char " + string)
inner = inner + f"char {string}=(char){string}Py;"
elif string.startswith("refchar"):
string = string[7:]
ok_list.append("char ref " + string)
inner = inner + f"char {string}=(char){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "char:"+{string}.ToString()'
elif string.startswith("int"):
string = string[3:]
ok_list.append("int "+string)
inner = inner + f"int {string}=(int){string}Py;"
elif string.startswith("ulong"):
string = string[5:]
ok_list.append("int "+string)
inner = inner + f"ulong {string}=(ulong){string}Py;"
elif string.startswith("refulong"):
string = string[8:]
ok_list.append("int ref "+string)
inner = inner + f"ulong {string}=(ulong){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "ulong:"+{string}.ToString()'
elif string.startswith("refdouble"):
string = string[9:]
ok_list.append("double ref " + string)
inner = inner + f"double {string}=(double){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "double:"+{string}.ToString()'
elif string.startswith("double"):
string = string[6:]
ok_list.append("double " + string)
inner = inner + f"double {string}=(double){string}Py;"
elif string.startswith("string"):
string = string[6:]
ok_list.append("string "+string)
inner = inner + f"string {string}=(string){string}Py;"
elif string.startswith("StringBuilder"):
string = string[13:]
ok_list.append("String " + string)
inner = inner + f"StringBuilder {string}=(StringBuilder){string}Py;"
elif string.startswith("bool"):
string = string[4:]
ok_list.append("bool " + string)
inner = inner + f"bool {string}=(bool){string}Py;"
# elif string.startswith("dvpOutputIo"):
# string = string[11:]
# ok_list.append("int " + string)
# elif string.startswith("dvpRegion"):
# string = string[9:]
# ok_list.append("int " + string)
# elif string.startswith("dvpOpenMode"):
# string = string[11:]
# ok_list.append("int " + string)
# elif string.startswith("dvpInputIo"):
# string = string[10:]
# ok_list.append("int " + string)
# elif string.startswith("dvpLine"):
# string = string[7:]
# ok_list.append("int " + string)
# elif string.startswith("dvpTriggerSource"):
# string = string[16:]
# ok_list.append("int " + string)
elif string.startswith("refuint"):
string = string[7:]
ok_list.append("int ref " + string)
inner = inner + f"uint {string}=(uint){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "uint:"+{string}.ToString()'
# elif string.startswith("refdvp"):
# string = string[6:]
# ok_list.append("@@@@@@@@@@ " + string)
elif string.startswith("refint"):
string = string[6:]
ok_list.append("int ref " + string)
inner = inner + f"int {string}=(int){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "int:"+{string}.ToString()'
elif string.startswith("reffloat"):
string = string[8:]
ok_list.append("float ref " + string)
inner = inner + f"float {string}=(float){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "float:"+{string}.ToString()'
elif string.startswith("IntPtr"):
string = string[6:]
ok_list.append("IntPtr怎么搞 " + string)
inner = inner + f"uint {string}=(uint){string}Py;"
flag=1
elif string.startswith("refIntPtr"):
string = string[9:]
ok_list.append("REFIntPtr怎么搞 " + string)
inner = inner + f"uint {string}=(uint){string}Py;"
flag=1
elif string.startswith("refbool"):
string = string[7:]
ok_list.append("bool ref " + string)
inner = inner + f"bool {string}=(bool){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "bool:"+{string}.ToString()'
# elif string.startswith("dvp"):
# string = string[0:]
# print(string)
# ok_list.append("bool " + string)
#下面是全部的结构体
elif string.startswith("dvpAeConfig"):
string = string[11:]
ok_list.append("string " + string)
inner = inner + f"dvpAeConfig {string}=new dvpAeConfig();"
elif string.startswith("dvpBufferConfig"):
string = string[15:]
ok_list.append("string " + string)
inner = inner + f"dvpBufferConfig {string}=new dvpBufferConfig();"
elif string.startswith("dvpCameraInfo"):
string = string[13:]
ok_list.append("string " + string)
inner = inner + f"dvpCameraInfo {string}=new dvpCameraInfo();"
elif string.startswith("dvpColorCorrection"):
string = string[18:]
ok_list.append("string " + string)
inner = inner + f"dvpColorCorrection {string}=new dvpColorCorrection();"
elif string.startswith("dvpColorMatrix"):
string = string[14:]
ok_list.append("string " + string)
inner = inner + f"dvpColorMatrix {string}=new dvpColorMatrix();"
elif string.startswith("dvpCurveArray"):
string = string[13:]
ok_list.append("string " + string)
inner = inner + f"dvpCurveArray {string}=new dvpCurveArray();"
elif string.startswith("dvpCurveLut"):
string = string[11:]
ok_list.append("string " + string)
inner = inner + f"dvpCurveLut {string}=new dvpCurveLut();"
elif string.startswith("dvpDoubleDescr"):
string = string[14:]
ok_list.append("string " + string)
inner = inner + f"dvpDoubleDescr {string}=new dvpDoubleDescr();"
elif string.startswith("dvpFloatDescr"):
string = string[13:]
ok_list.append("string " + string)
inner = inner + f"dvpFloatDescr {string}=new dvpFloatDescr();"
elif string.startswith("dvpFormatSelection"):
string = string[18:]
ok_list.append("string " + string)
inner = inner + f"dvpFormatSelection {string}=new dvpFormatSelection();"
elif string.startswith("dvpFrameBuffer"):
string = string[14:]
ok_list.append("string " + string)
inner = inner + f"dvpFrameBuffer {string}=new dvpFrameBuffer();"
elif string.startswith("dvpFrameCount"):
string = string[13:]
ok_list.append("string " + string)
inner = inner + f"dvpFrameCount {string}=new dvpFrameCount();"
elif string.startswith("dvpFrame"):
string = string[8:]
ok_list.append("string " + string)
inner = inner + f"dvpFrame {string}=new dvpFrame();"
elif string.startswith("dvpFunctionInfo"):
string = string[15:]
ok_list.append("string " + string)
inner = inner + f"dvpFunctionInfo {string}=new dvpFunctionInfo();"
elif string.startswith("dvpIntDescr"):
string = string[11:]
ok_list.append("string " + string)
inner = inner + f"dvpIntDescr {string}=new dvpIntDescr();"
elif string.startswith("dvpLineInfo"):
string = string[11:]
ok_list.append("string " + string)
inner = inner + f"dvpLineInfo {string}=new dvpLineInfo();"
elif string.startswith("dvpLineTriggerConfig"):
string = string[20:]
ok_list.append("string " + string)
inner = inner + f"dvpLineTriggerConfig {string}=new dvpLineTriggerConfig();"
elif string.startswith("dvpPoint2f"):
string = string[10:]
ok_list.append("string " + string)
inner = inner + f"dvpPoint2f {string}=new dvpPoint2f();"
elif string.startswith("dvpPoint3c"):
string = string[10:]
ok_list.append("string " + string)
inner = inner + f"dvpPoint3c {string}=new dvpPoint3c();"
elif string.startswith("dvpQuickRoi"):
string = string[11:]
ok_list.append("string " + string)
inner = inner + f"dvpQuickRoi {string}=new dvpQuickRoi();"
elif string.startswith("dvpRegionDescr"):
string = string[14:]
ok_list.append("string " + string)
inner = inner + f"dvpRegionDescr {string}=new dvpRegionDescr();"
elif string.startswith("dvpRegion"):
string = string[9:]
ok_list.append("string " + string)
inner = inner + f"dvpRegion {string}=new dvpRegion();"
elif string.startswith("dvpResolutionMode"):
string = string[17:]
ok_list.append("string " + string)
inner = inner + f"dvpResolutionMode {string}=new dvpResolutionMode();"
elif string.startswith("dvpSelectionDescr"):
string = string[17:]
ok_list.append("string " + string)
inner = inner + f"dvpSelectionDescr {string}=new dvpSelectionDescr();"
elif string.startswith("dvpSelection"):
string = string[12:]
ok_list.append("string " + string)
inner = inner + f"dvpSelection {string}=new dvpSelection();"
elif string.startswith("dvpSensorInfo"):
string = string[13:]
ok_list.append("string " + string)
inner = inner + f"dvpSensorInfo {string}=new dvpSensorInfo();"
elif string.startswith("dvpTemperatureInfo"):
string = string[18:]
ok_list.append("string " + string)
inner = inner + f"dvpTemperatureInfo {string}=new dvpTemperatureInfo();"
elif string.startswith("dvpUint64Descr"):
string = string[14:]
ok_list.append("string " + string)
inner = inner + f"dvpUint64Descr {string}=new dvpUint64Descr();"
elif string.startswith("dvpUintDescr"):
string = string[12:]
ok_list.append("string " + string)
inner = inner + f"dvpUintDescr {string}=new dvpUintDescr();"
elif string.startswith("dvpUserIoInfo"):
string = string[13:]
ok_list.append("string " + string)
inner = inner + f"dvpUserIoInfo {string}=new dvpUserIoInfo();"
elif string.startswith("dvpVariant"):
string = string[10:]
ok_list.append("string " + string)
inner = inner + f"dvpVariant {string}=new dvpVariant();"
elif string.startswith("RECT"):
string = string[4:]
ok_list.append("string " + string)
inner = inner + f"RECT {string}=new RECT();"
#下面是结构体 引用类型参数
elif string.startswith("refdvpAeConfig"):
string = string[14:]
ok_list.append("string ref " + string)
inner = inner + f"dvpAeConfig {string}=new dvpAeConfig();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpBufferConfig"):
string = string[18:]
ok_list.append("string ref " + string)
inner = inner + f"dvpBufferConfig {string}=new dvpBufferConfig();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpCameraInfo"):
string = string[16:]
ok_list.append("string ref " + string)
inner = inner + f"dvpCameraInfo {string}=new dvpCameraInfo();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpColorCorrection"):
string = string[21:]
ok_list.append("string ref " + string)
inner = inner + f"dvpColorCorrection {string}=new dvpColorCorrection();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpColorMatrix"):
string = string[17:]
ok_list.append("string ref " + string)
inner = inner + f"dvpColorMatrix {string}=new dvpColorMatrix();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpCurveArray"):
string = string[16:]
ok_list.append("string ref " + string)
inner = inner + f"dvpCurveArray {string}=new dvpCurveArray();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpCurveLut"):
string = string[14:]
ok_list.append("string ref " + string)
inner = inner + f"dvpCurveLut {string}=new dvpCurveLut();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpDoubleDescr"):
string = string[17:]
ok_list.append("string ref " + string)
inner = inner + f"dvpDoubleDescr {string}=new dvpDoubleDescr();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpFloatDescr"):
string = string[16:]
ok_list.append("string ref " + string)
inner = inner + f"dvpFloatDescr {string}=new dvpFloatDescr();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpFormatSelection"):
string = string[21:]
ok_list.append("string ref " + string)
inner = inner + f"dvpFormatSelection {string}=new dvpFormatSelection();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpFrameBuffer"):
string = string[17:]
ok_list.append("string ref " + string)
inner = inner + f"dvpFrameBuffer {string}=new dvpFrameBuffer();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpFrameCount"):
string = string[16:]
ok_list.append("string ref " + string)
inner = inner + f"dvpFrameCount {string}=new dvpFrameCount();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpFrame"):
string = string[11:]
ok_list.append("string ref " + string)
inner = inner + f"dvpFrame {string}=new dvpFrame();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpFunctionInfo"):
string = string[18:]
ok_list.append("string ref " + string)
inner = inner + f"dvpFunctionInfo {string}=new dvpFunctionInfo();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpIntDescr"):
string = string[14:]
ok_list.append("string ref " + string)
inner = inner + f"dvpIntDescr {string}=new dvpIntDescr();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpLineInfo"):
string = string[14:]
ok_list.append("string ref " + string)
inner = inner + f"dvpLineInfo {string}=new dvpLineInfo();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpLineTriggerConfig"):
string = string[23:]
ok_list.append("string ref " + string)
inner = inner + f"dvpLineTriggerConfig {string}=new dvpLineTriggerConfig();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpPoint2f"):
string = string[13:]
ok_list.append("string ref " + string)
inner = inner + f"dvpPoint2f {string}=new dvpPoint2f();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpPoint3c"):
string = string[13:]
ok_list.append("string ref " + string)
inner = inner + f"dvpPoint3c {string}=new dvpPoint3c();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpQuickRoi"):
string = string[14:]
ok_list.append("string ref " + string)
inner = inner + f"dvpQuickRoi {string}=new dvpQuickRoi();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpRegionDescr"):
string = string[17:]
ok_list.append("string ref " + string)
inner = inner + f"dvpRegionDescr {string}=new dvpRegionDescr();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpRegion"):
string = string[12:]
ok_list.append("string ref " + string)
inner = inner + f"dvpRegion {string}=new dvpRegion();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpResolutionMode"):
string = string[20:]
ok_list.append("string ref " + string)
inner = inner + f"dvpResolutionMode {string}=new dvpResolutionMode();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpSelectionDescr"):
string = string[20:]
ok_list.append("string ref " + string)
inner = inner + f"dvpSelectionDescr {string}=new dvpSelectionDescr();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpSelection"):
string = string[15:]
ok_list.append("string ref " + string)
inner = inner + f"dvpSelection {string}=new dvpSelection();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpSensorInfo"):
string = string[16:]
ok_list.append("string ref " + string)
inner = inner + f"dvpSensorInfo {string}=new dvpSensorInfo();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpTemperatureInfo"):
string = string[21:]
ok_list.append("string ref " + string)
inner = inner + f"dvpTemperatureInfo {string}=new dvpTemperatureInfo();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpUint64Descr"):
string = string[17:]
ok_list.append("string ref " + string)
inner = inner + f"dvpUint64Descr {string}=new dvpUint64Descr();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpUintDescr"):
string = string[15:]
ok_list.append("string ref " + string)
inner = inner + f"dvpUintDescr {string}=new dvpUintDescr();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpUserIoInfo"):
string = string[16:]
ok_list.append("string ref " + string)
inner = inner + f"dvpUserIoInfo {string}=new dvpUserIoInfo();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refdvpVariant"):
string = string[13:]
ok_list.append("string ref " + string)
inner = inner + f"dvpVariant {string}=new dvpVariant();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
elif string.startswith("refRECT"):
string = string[7:]
ok_list.append("string ref " + string)
inner = inner + f"RECT {string}=new RECT();"
PrintStructValues = PrintStructValues + f"+ PrintStructValues({string})"
# 下面是全部的枚举
elif string.startswith("dvpCurveStyle"):
string = string[13:]
ok_list.append("int " + string)
inner = inner + f"dvpCurveStyle {string}=(dvpCurveStyle){string}Py;"
elif string.startswith("dvpAeMode"):
string = string[9:]
ok_list.append("int " + string)
inner = inner + f"dvpAeMode {string}=(dvpAeMode){string}Py;"
elif string.startswith("dvpAeOperation"):
string = string[14:]
ok_list.append("int " + string)
inner = inner + f"dvpAeOperation {string}=(dvpAeOperation){string}Py;"
elif string.startswith("dvpAntiFlick"):
string = string[12:]
ok_list.append("int " + string)
inner = inner + f"dvpAntiFlick {string}=(dvpAntiFlick){string}Py;"
elif string.startswith("dvpAwbOperation"):
string = string[15:]
ok_list.append("int " + string)
inner = inner + f"dvpAwbOperation {string}=(dvpAwbOperation){string}Py;"
elif string.startswith("dvpBits"):
string = string[7:]
ok_list.append("int " + string)
inner = inner + f"dvpBits {string}=(dvpBits){string}Py;"
elif string.startswith("dvpBufferMode"):
string = string[13:]
ok_list.append("int " + string)
inner = inner + f"dvpBufferMode {string}=(dvpBufferMode){string}Py;"
elif string.startswith("dvpCurveStyle"):
string = string[13:]
ok_list.append("int " + string)
inner = inner + f"dvpCurveStyle {string}=(dvpCurveStyle){string}Py;"
elif string.startswith("dvpEvent"):
string = string[8:]
ok_list.append("int " + string)
inner = inner + f"dvpEvent {string}=(dvpEvent){string}Py;"
elif string.startswith("dvpFirstPosition"):
string = string[16:]
ok_list.append("int " + string)
inner = inner + f"dvpFirstPosition {string}=(dvpFirstPosition){string}Py;"
elif string.startswith("dvpInputIoFunction"):
string = string[18:]
ok_list.append("int " + string)
inner = inner + f"dvpInputIoFunction {string}=(dvpInputIoFunction){string}Py;"
elif string.startswith("dvpInputIo"):
string = string[10:]
ok_list.append("int " + string)
inner = inner + f"dvpInputIo {string}=(dvpInputIo){string}Py;"
elif string.startswith("dvpLineMode"):
string = string[11:]
ok_list.append("int " + string)
inner = inner + f"dvpLineMode {string}=(dvpLineMode){string}Py;"
elif string.startswith("dvpLineSource"):
string = string[13:]
ok_list.append("int " + string)
inner = inner + f"dvpLineSource {string}=(dvpLineSource){string}Py;"
elif string.startswith("dvpOpenMode"):
string = string[11:]
ok_list.append("int " + string)
inner = inner + f"dvpOpenMode {string}=(dvpOpenMode){string}Py;"
elif string.startswith("dvpOutputIoFunction"):
string = string[19:]
ok_list.append("int " + string)
inner = inner + f"dvpOutputIoFunction {string}=(dvpOutputIoFunction){string}Py;"
elif string.startswith("dvpOutputIo"):
string = string[11:]
ok_list.append("int " + string)
inner = inner + f"dvpOutputIo {string}=(dvpOutputIo){string}Py;"
elif string.startswith("dvpReportLevel"):
string = string[14:]
ok_list.append("int " + string)
inner = inner + f"dvpReportLevel {string}=(dvpReportLevel){string}Py;"
elif string.startswith("dvpReportPart"):
string = string[13:]
ok_list.append("int " + string)
inner = inner + f"dvpReportPart {string}=(dvpReportPart){string}Py;"
elif string.startswith("dvpSensorPixel"):
string = string[14:]
ok_list.append("int " + string)
inner = inner + f"dvpSensorPixel {string}=(dvpSensorPixel){string}Py;"
elif string.startswith("dvpSensorType"):
string = string[13:]
ok_list.append("int " + string)
inner = inner + f"dvpSensorType {string}=(dvpSensorType){string}Py;"
elif string.startswith("dvpStatus"):
string = string[9:]
ok_list.append("int " + string)
inner = inner + f"dvpStatus {string}=(dvpStatus){string}Py;"
elif string.startswith("dvpStreamEvent"):
string = string[14:]
ok_list.append("int " + string)
inner = inner + f"dvpStreamEvent {string}=(dvpStreamEvent){string}Py;"
elif string.startswith("dvpStreamFormat"):
string = string[15:]
ok_list.append("int " + string)
inner = inner + f"dvpStreamFormat {string}=(dvpStreamFormat){string}Py;"
elif string.startswith("dvpStreamState"):
string = string[14:]
ok_list.append("int " + string)
inner = inner + f"dvpStreamState {string}=(dvpStreamState){string}Py;"
elif string.startswith("dvpStrobeDriver"):
string = string[15:]
ok_list.append("int " + string)
inner = inner + f"dvpStrobeDriver {string}=(dvpStrobeDriver){string}Py;"
elif string.startswith("dvpStrobeOutputType"):
string = string[19:]
ok_list.append("int " + string)
inner = inner + f"dvpStrobeOutputType {string}=(dvpStrobeOutputType){string}Py;"
elif string.startswith("dvpTriggerInputType"):
string = string[19:]
ok_list.append("int " + string)
inner = inner + f"dvpTriggerInputType {string}=(dvpTriggerInputType){string}Py;"
elif string.startswith("dvpTriggerLineMode"):
string = string[18:]
ok_list.append("int " + string)
inner = inner + f"dvpTriggerLineMode {string}=(dvpTriggerLineMode){string}Py;"
elif string.startswith("dvpTriggerSource"):
string = string[16:]
ok_list.append("int " + string)
inner = inner + f"dvpTriggerSource {string}=(dvpTriggerSource){string}Py;"
elif string.startswith("dvpUserSet"):
string = string[10:]
ok_list.append("int " + string)
inner = inner + f"dvpUserSet {string}=(dvpUserSet){string}Py;"
elif string.startswith("dvpImageFormat"):
string = string[14:]
ok_list.append("int " + string)
inner = inner + f"dvpImageFormat {string}=(dvpImageFormat){string}Py;"
elif string.startswith("dvpDeviceType"):
string = string[13:]
ok_list.append("int " + string)
inner = inner + f"dvpDeviceType {string}=(dvpDeviceType){string}Py;"
elif string.startswith("dvpLine"):
string = string[7:]
ok_list.append("int " + string)
inner = inner + f"dvpLine {string}=(dvpLine){string}Py;"
# 下面是枚举(引用类型参数)
elif string.startswith("refdvpCurveStyle"):
string = string[16:]
ok_list.append("int ref " + string)
inner = inner + f"dvpCurveStyle {string}=(dvpCurveStyle){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpCurveStyle:"+{string}.ToString()'
elif string.startswith("refdvpAeMode"):
string = string[12:]
ok_list.append("int ref " + string)
inner = inner + f"dvpAeMode {string}=(dvpAeMode){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpAeMode:"+{string}.ToString()'
elif string.startswith("refdvpAeOperation"):
string = string[17:]
ok_list.append("int ref " + string)
inner = inner + f"dvpAeOperation {string}=(dvpAeOperation){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpAeOperation:"+{string}.ToString()'
elif string.startswith("refdvpAntiFlick"):
string = string[15:]
ok_list.append("int ref " + string)
inner = inner + f"dvpAntiFlick {string}=(dvpAntiFlick){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpAntiFlick:"+{string}.ToString()'
elif string.startswith("refdvpAwbOperation"):
string = string[18:]
ok_list.append("int ref " + string)
inner = inner + f"dvpAwbOperation {string}=(dvpAwbOperation){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpAwbOperation:"+{string}.ToString()'
elif string.startswith("refdvpBits"):
string = string[10:]
ok_list.append("int ref " + string)
inner = inner + f"dvpBits {string}=(dvpBits){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpBits:"+{string}.ToString()'
elif string.startswith("refdvpBufferMode"):
string = string[16:]
ok_list.append("int ref " + string)
inner = inner + f"dvpBufferMode {string}=(dvpBufferMode){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpBufferMode:"+{string}.ToString()'
elif string.startswith("refdvpCurveStyle"):
string = string[16:]
ok_list.append("int ref " + string)
inner = inner + f"dvpCurveStyle {string}=(dvpCurveStyle){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpCurveStyle:"+{string}.ToString()'
elif string.startswith("refdvpEvent"):
string = string[11:]
ok_list.append("int ref " + string)
inner = inner + f"dvpEvent {string}=(dvpEvent){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpEvent:"+{string}.ToString()'
elif string.startswith("refdvpFirstPosition"):
string = string[19:]
ok_list.append("int ref " + string)
inner = inner + f"dvpFirstPosition {string}=(dvpFirstPosition){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpFirstPosition:"+{string}.ToString()'
elif string.startswith("refdvpInputIoFunction"):
string = string[21:]
ok_list.append("int ref " + string)
inner = inner + f"dvpInputIoFunction {string}=(dvpInputIoFunction){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpInputIoFunction:"+{string}.ToString()'
elif string.startswith("refdvpInputIo"):
string = string[13:]
ok_list.append("int ref " + string)
inner = inner + f"dvpInputIo {string}=(dvpInputIo){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpInputIo:"+{string}.ToString()'
elif string.startswith("refdvpLineMode"):
string = string[14:]
ok_list.append("int ref " + string)
inner = inner + f"dvpLineMode {string}=(dvpLineMode){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpLineMode:"+{string}.ToString()'
elif string.startswith("refdvpLineSource"):
string = string[16:]
ok_list.append("int ref " + string)
inner = inner + f"dvpLineSource {string}=(dvpLineSource){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpLineSource:"+{string}.ToString()'
elif string.startswith("refdvpOpenMode"):
string = string[14:]
ok_list.append("int ref " + string)
inner = inner + f"dvpOpenMode {string}=(dvpOpenMode){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpOpenMode:"+{string}.ToString()'
elif string.startswith("refdvpOutputIoFunction"):
string = string[22:]
ok_list.append("int ref " + string)
inner = inner + f"dvpOutputIoFunction {string}=(dvpOutputIoFunction){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpOutputIoFunction:"+{string}.ToString()'
elif string.startswith("refdvpOutputIo"):
string = string[14:]
ok_list.append("int ref " + string)
inner = inner + f"dvpOutputIo {string}=(dvpOutputIo){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpOutputIo:"+{string}.ToString()'
elif string.startswith("refdvpReportLevel"):
string = string[17:]
ok_list.append("int ref " + string)
inner = inner + f"dvpReportLevel {string}=(dvpReportLevel){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpReportLevel:"+{string}.ToString()'
elif string.startswith("refdvpReportPart"):
string = string[16:]
ok_list.append("int ref " + string)
inner = inner + f"dvpReportPart {string}=(dvpReportPart){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpReportPart:"+{string}.ToString()'
elif string.startswith("refdvpSensorPixel"):
string = string[17:]
ok_list.append("int ref " + string)
inner = inner + f"dvpSensorPixel {string}=(dvpSensorPixel){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpSensorPixel:"+{string}.ToString()'
elif string.startswith("refdvpSensorType"):
string = string[16:]
ok_list.append("int ref " + string)
inner = inner + f"dvpSensorType {string}=(dvpSensorType){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpSensorType:"+{string}.ToString()'
elif string.startswith("refdvpStatus"):
string = string[12:]
ok_list.append("int ref " + string)
inner = inner + f"dvpStatus {string}=(dvpStatus){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpStatus:"+{string}.ToString()'
elif string.startswith("refdvpStreamEvent"):
string = string[17:]
ok_list.append("int ref " + string)
inner = inner + f"dvpStreamEvent {string}=(dvpStreamEvent){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpStreamEvent:"+{string}.ToString()'
elif string.startswith("refdvpStreamFormat"):
string = string[18:]
ok_list.append("int ref " + string)
inner = inner + f"dvpStreamFormat {string}=(dvpStreamFormat){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpStreamFormat:"+{string}.ToString()'
elif string.startswith("refdvpStreamState"):
string = string[17:]
ok_list.append("int ref " + string)
inner = inner + f"dvpStreamState {string}=(dvpStreamState){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpStreamState:"+{string}.ToString()'
elif string.startswith("refdvpStrobeDriver"):
string = string[18:]
ok_list.append("int ref " + string)
inner = inner + f"dvpStrobeDriver {string}=(dvpStrobeDriver){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpStrobeDriver:"+{string}.ToString()'
elif string.startswith("refdvpStrobeOutputType"):
string = string[22:]
ok_list.append("int ref " + string)
inner = inner + f"dvpStrobeOutputType {string}=(dvpStrobeOutputType){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpStrobeOutputType:"+{string}.ToString()'
elif string.startswith("refdvpTriggerInputType"):
string = string[22:]
ok_list.append("int ref " + string)
inner = inner + f"dvpTriggerInputType {string}=(dvpTriggerInputType){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpTriggerInputType:"+{string}.ToString()'
elif string.startswith("refdvpTriggerLineMode"):
string = string[21:]
ok_list.append("int ref " + string)
inner = inner + f"dvpTriggerLineMode {string}=(dvpTriggerLineMode){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpTriggerLineMode:"+{string}.ToString()'
elif string.startswith("refdvpTriggerSource"):
string = string[19:]
ok_list.append("int ref " + string)
inner = inner + f"dvpTriggerSource {string}=(dvpTriggerSource){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpTriggerSource:"+{string}.ToString()'
elif string.startswith("refdvpUserSet"):
string = string[13:]
ok_list.append("int ref " + string)
inner = inner + f"dvpUserSet {string}=(dvpUserSet){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpUserSet:"+{string}.ToString()'
elif string.startswith("refdvpImageFormat"):
string = string[17:]
ok_list.append("int ref " + string)
inner = inner + f"dvpImageFormat {string}=(dvpImageFormat){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpImageFormat:"+{string}.ToString()'
elif string.startswith("refdvpDeviceType"):
string = string[16:]
ok_list.append("int ref " + string)
inner = inner + f"dvpDeviceType {string}=(dvpDeviceType){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpDeviceType:"+{string}.ToString()'
elif string.startswith("refdvpLine"):
string = string[10:]
ok_list.append("int ref " + string)
inner = inner + f"dvpLine {string}=(dvpLine){string}Py;"
returnEnum = returnEnum + f'+"\\n"+ "dvpLine:"+{string}.ToString()'
else:
ok_list.append(string)
# print(ok_list)
xc=",".join(ok_list)
xc1=[]
xc2=[]
xc3=[]
if len(ok_list)>=1:
for item in ok_list:
# print(item)
a=item.split()
if len(a)>2:
xc1.append("ref "+item.split()[2])
xc3.append(item.split()[0]+" "+item.split()[2])
else:
xc1.append(item.split()[1])
xc3.append(item)
xc2=",".join(xc1)
# else:
# xc2=ok_list[0].spi
#添加后缀
xc = [elem + 'Py' for elem in xc3]
xc = ",".join(xc)
# print(xc2)
# 使用正则表达式提取param标签中的文字
param_list = re.findall(r'<param name=".*?">(.*?)</param>', section, re.DOTALL)
# print(param_list)
# 提取返回值说明
returns = re.findall(r'<returns>(.*?)</returns>', section)
if not returns:
returns=[""]
# print(returns)
#提取para说明
result = re.findall(r"<para>(.*?)</para>", section, flags=re.S)
# print(result)
#提取函数说明
summary_pattern = r'<summary>(.+?)<\/summary>'
match = re.search(summary_pattern, section, flags=re.DOTALL)
if match:
summary_text = match.group(1).strip()
# print(summary_text)
lines = summary_text.split('\n')
first_line = lines[0].replace('///', '').strip()
# print(first_line)
result1=[f'{x}:{y}\n'for x,y in zip(param_names,param_list)]
# print(result1)
tmp="\t:param "+"\t:param ".join(result1)
# print(tmp)
all+=f'\ndef {func_name}(self,{",".join(param_names)}):\n\t"""\n\t{first_line}\n{tmp}\t:return:{returns[0]}\n\t"""\n\treturn self.instance.{func_name}({",".join(param_names)})\n'
# print(all)
#写入文件中
# with open('success.txt', 'w', encoding='utf-8') as f:
# f.write(all)
if flag==1:
# print(func_name)
continue
# print(inner)
# print(f'public static string {func_name}({xc}){{{inner} return DVPCamera.{func_name}({xc2}).ToString();}}')
PrintStructValues=f'+"\\n"{PrintStructValues}'
if PrintStructValues=='+"\\n"':
PrintStructValues=""
# returnEnum=f'+"\\n"{returnEnum}"'
# returnEnum='+"\\n"'.join(returnEnum)
if returnEnum == '+"\\n""':
returnEnum = ""
print(f'public static string {func_name}({xc}){{{inner} return "dvpStatus:" + DVPCamera.{func_name}({xc2}).ToString(){PrintStructValues}{returnEnum};}}')