C#二次封装库函数自动生成

实现结构体与枚举返回给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(string value) 方法将转化为结构体类型。

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

生成代码效果

在python中调用


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇