c#非托管对象,c# 托管 非托管

  c#非托管对象,c# 托管 非托管

  开发工具:C#2013

  功能:

  针对简单的C#类,生成对应的非托管C类,并生成托管C的转换函数。

  应用场景:

  界面层、数据层C#,逻辑层丙。

  简单的C#类:类型只包括双字符串列表

  公共类CFieldInfo

  {

  公共CFieldInfo(字符串strFullTypeName,字符串strName,字符串strGenericTypeArguments)

  {

  m _ strFullTypeName=strFullTypeName;

  m _ strName=strName

  m _ strgenicyparguments=strgenicyparguments;

  }

  公共只读字符串m _ strFullTypeName

  公共只读字符串m _ strName

  公共只读字符串m _ strGenericTypeArguments

  }

  公共类CClassInfo

  {

  公共字符串m _ strName//类名

  公共列表CFieldInfo fielss=新列表CFieldInfo

  }

  类集合类

  {

  公共静态列表CClassInfo创建(字符串strSpaceName)

  {

  返回创建(程序集.GetExecutingAssembly()、strSpaceName);

  }

  公共静态列表CClassInfo Create(Assembly assem,string strSpaceName)

  {

  Type[] types=assem .GetTypes();

  列表CClassInfo classInfos=新列表CClassInfo

  for(int I=0;我打字。长度;我)

  {

  if( strSpaceName==types[i].名称空间)

  {

  classInfos .add(创建类(类型[I]));

  }

  }

  返回classInfos

  }

  静态CClassInfo CreateClass(类型类型)

  {

  CClassInfo类信息=new CClassInfo();

  classInfo.m_strName=type .姓名;

  变量字段=类型GetFields(BindingFlags .非公共绑定标志.公共绑定标志.Instance BindingFlags .仅声明);

  foreach(字段中的变量字段)

  {

  如果(字段字段类型。generictypearguments。长度0)

  {

  classInfo.fielss.Add(新的CFieldInfo(字段。字段类型。名称,字段。名称,字段字段类型。generictype参数[0].姓名));

  }

  其他

  {

  classInfo.fielss.Add(新的CFieldInfo(字段。字段类型。名称,字段。姓名, ));

  }

  }

  返回班级信息表

  }

  }

  类别更改规则

  {

  公共更改规则(字符串strSharpType,字符串strChangeFun,字符串strCPlusType,字符串strSharpGenericTypeArguments,字符串strCPlusGenericTypeArguments,字符串strChangeToSharpFun)

  {

  m _ strCSharpType=strSharpType

  m _ strChangeToCLRFun=strChangeFun;

  m _ strCPlusType=strCPlusType

  m _ strsharpgenerictype参数=strsharpgenerictype参数;

  m _ strCPlusGenericTypeArguments=strCPlusGenericTypeArguments;

  m _ strChangeToCPlusFun=strChangeToSharpFun;

  }

  公共字符串GetCPlusName()

  {

  if(==m _ strCPlusGenericTypeArguments)

  {

  返回m _ strCPlusType

  }

  返回m _ strCPlusType m _ strCPlusGenericTypeArguments

  }

  公共只读字符串m _ strCSharpType

  公共只读字符串m _ strChangeToCLRFun

  公共只读字符串m _ strCPlusType

  公共只读字符串m _ strSharpGenericTypeArguments

  公共只读字符串m _ strCPlusGenericTypeArguments;

  公共只读字符串m _ strChangeToCPlusFun

  }

  类别更改规则

  {

  公共void添加规则(字符串strSharpType,字符串strChangeFun,字符串strCPlusType,字符串strsharpgenerictype参数,字符串strcplusgenerictype参数,字符串strChangeToCPlusFun= )

  {

  CChangRule rule=new CChangRule(strSharpType,strChangeFun,strCPlusType,strSharpGenericTypeArguments,strCPlusGenericTypeArguments,strChangeToCPlusFun);

  m _规则。添加(规则);

  }

  公共CChangRule GetRule(CFieldInfo字段)

  {

  for(int I=0;我是m _规则.数数;我)

  {

  if (m_rules[i].m_strCSharpType!=field.m_strFullTypeName)

  {

  继续;

  }

  如果(!=字段。m _ strgenerictypearguents)

  {

  如果(字段。m _ strgenerictypearguements!=m_rules[i].m_strSharpGenericTypeArguments)

  {

  继续;

  }

  }

  返回m _ rules[I];

  }

  返回新的CChangRule(field . m _ strFullTypeName,=,字段。m _ strFullTypeName,, );

  }

  受保护列表更改规则m_rules=新列表更改规则

  }

  类CCreateDataClass

  {

  公共字符串创建(CClassInfo classInfo,CChangeRules更改规则)

  {

  string str= class m _ strExportDefine C class info。m _ strName \ n { \ n public:\ n 更改字段(类别信息,更改规则) };

  返回字符串;

  }

  字符串更改字段(CClassInfo classInfo,CChangeRules更改规则)

  {

  string str=

  for(int I=0;一类信息。菲尔斯。数数;我)

  {

  var f=类别信息。fielss[I];

  更改规则.获取规则(f);

  str=规则. GetCPlusName() f . m _ strName ;\ r \ n ;

  }

  返回字符串;

  }

  公共字符串m _ strExportDefine= CPLUSALOG _ API _ 2021 10 29 ;

  }

  类CCreateChangeClass

  {

  公共void创建(CClassInfo类信息,CChangeRules更改规则)

  {

  if(==m _ strChangeClassName)

  {

  m _ strchange class name= c change 类信息。m _ strName

  }

   m _ strDeclare= class m _ strExportDefine m _ strChangeClassName \ n { \ n public:\ n

  createchangetocrdeclare(class info,Chang rules)CreateChangeToCPlusDeclare(class info,Chang rules) };\ n ;

  m _ strDefine=CreateChangeToCLR(类信息,更改规则) \ n createchangetoplus(类信息,更改规则);

  }

  字符串createchangetocrdeclare(CClassInfo类信息,CChangeRules更改规则)

  {

  将“静态”类信息。我叫^返回到(const c 类信息。m _ strname src);\ n ;

  }

  字符串createchangetoplusdeclare(CClassInfo类信息,CChangeRules更改规则)

  {

  将"静态C classInfo.m_strName "返回给(类信息。^有限公司);\ n ;

  }

  字符串CreateChangeToCLR(CClassInfo类信息,CChangeRules更改规则)

  {

  string str=类信息。m _ strname ^ m _ str change class name :to(const c class info。m _ strname src)\ n { \ n ;

  str=类别信息。 m _ strname ^ ret=gcnew 类别信息。m _ strname ();\ n ;

  for(int I=0;一类信息。菲尔斯。数数;我)

  {

  更改规则.获取规则(类信息。fielss[I]);

  菲尔兹[i].m _ strName =规则。 m _ strChangeToCLRFun .classInfo.fielss[i].m _ strName’);\ n ;

  }

  str= return ret \ n

  返回字符串} \ n ;

  }

  字符串createchangetoplus(CClassInfo类信息,CChangeRules更改规则)

  {

  string str= c 类信息。m _ strname m _ str change class name :to( class info。 m _ strname ^ src)\ n { \ n ;

  str= C 类信息。m _ strName ret\ n ;

  for(int I=0;一类信息。菲尔斯。数数;我)

  {

  更改规则.获取规则(类信息。fielss[I]);

  fielss[i].m _ strName =规则。m _ strChangeToCPlusFun (src-类信息。菲尔兹[我]。m _ strName’);\ n ;

  }

  str= return ret \ n

  返回字符串} \ n ;

  }

  公共字符串m _ strExportDefine=// CPLUSALOG _ API _ 2021 10 29 ;

  公共字符串m _ strChangeClassName=

  公共字符串m _ strDeclare=

  公共字符串m _ strDefine=

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: