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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。