VC.Net的托管与非托管混合编程
来源:互联网 发布:套筒扳手 淘宝 编辑:程序博客网 时间:2024/04/30 02:37
http://hi.baidu.com/guo_1017/item/67b9ea33a4db5025b2c0c514
VC.Net的托管与非托管混合编程
文章来源:卓锐精品之博 http://blog.elitehome.cn
作者:华珑
这几天一直研究VC.Net的托管与非托管混合编程
.Net作为一个非常优秀的开发平台,能让开发人员快速开发界面与应用,但.Net托管代码是可以很轻易的反编译,给开发者带来了很多麻烦。而 VC.Net的非托管代码可以有效防止反编译,至少不是那么容易反编译。VC.Net的一个非常有用的开发方式,就是托管代码和非托管代码的混合开发。
C#作为一种新型的纯托管的开发语言,在使用上,有极其简单的学习过程,让学习者能很快掌握与使用。因此,我们的混合编程,可使用C#开发的DLL,在VC.Net中可以方便被引用。
VC.Net中的混合编程,最困难的并不是VC++的语言难懂复杂,而是托管与非托管之间的数据转换。
目前寻找到一种相对比较简单可靠的方式:
使用cli::array来做中间体转换。
cli::array可同时在托管与非托管代码中使用,并可方便将非托管的char数组类型变成cli::array类型,并通过托管的System::Text::UTF8Encoding转换成托管的String^类型。
由于非托管的数据类型大都能转换成char数组,而cli::array类型实际就是托管代码中的byte[]类型,因此也可以方便转换成各种托管的数据类型。
具体的例子如下:
- String^ ConvertToString(char* inChar, int Len)
- {
- cli::array<unsigned char>^ cli_array = gcnew cli::array<unsigned char>(Len);
- for(int i=0;i < Len;i++)
- cli_array[i] = inChar[i];
- System::Text::UTF8Encoding ^ encoding=gcnew System::Text::UTF8Encoding();
- return encoding->GetString(cli_array);
- }
- char * ConvertToChar(String^ inString)
- {
- int Len = _inString->Length;
- cli::array<unsigned char>^ cli_array = gcnew cli::array<unsigned char>(Len);
- System::Text::UTF8Encoding ^ encoding=gcnew System::Text::UTF8Encoding();
- encoding->GetBytes(inString,0,Len,cli_array,0);
- char* outChar=new char[Len];
- for(int i=0;i<Len;i++)
- outChar[i]=cli_array[i];
- return outChar
- }
在VC.Net中,用nullptr来代替null。
- VC.Net的托管与非托管混合编程
- 托管与非托管的混合编程
- 托管与非托管混合编程
- .net 托管与非托管类型比较
- .NET 托管资源与非托管资源
- .net 托管代码与非托管代码
- .net 托管代码与非托管代码
- .net 中的托管与非托管
- .net 托管代码与非托管代码
- .net 中的托管与非托管
- 托管与非托管
- 托管与非托管
- 托管与非托管
- 托管与非托管
- 托管与非托管
- 托管与非托管
- 使用c++/CLI实现c++托管与非托管混合编程
- C#与C++的混合编程 之二 使用非托管dll 导出标准函数
- spring学习方法源码分析
- apache allow 和deny 详解
- 用iterator遍历map容器高效率方法
- LINUX ORACLE11G安装与卸载
- 伪句柄
- VC.Net的托管与非托管混合编程
- linux信号量编程
- 编写一个简单的 jQuery 插件(模板)
- http://ac.jobdu.com/problem.php?pid=1008
- 连接路由器上面的服务,必须先查看服务是在什么端口上面监听的 ,然后让防火墙开放端口,客户端才可以访问。
- 关于SMALI语法
- http://ac.jobdu.com/problem.php?pid=1009
- linux time相关函数
- exception: AbstractUserDetailsAuthenticationProvider.badCredentials