VC++ 非托管代码 & 托管代码
#pragma managed
#pragma unmanaged
看了好多好多非托管代码和托管代码之间相互调用,感觉都没有说在重点上,到底怎么用才是关键,理论的东西我们到微软官网上就可以找到,毕竟这个是微软创造的东西,说以这里就直说一下用法。
这里只说一下VC++,因为其他语言微软现在只支持.net了。也就是说C#和VB,开发出来的东西,基本上也就是.net的产物了(这个我也不是100%可定,至少在vs2008以后,只有VC支持非托管和托管混合了)。至于使用com之类的链接,可以跳过了。又不是底层开发,那个东西太繁琐了。
VC++支持托管和非托管代码混编,其实用的和简单,网上也有很多例子,不过我感觉太烦琐了。并且大部分是托管调用非托管代码(这个是有原因了,非托管代码比托管代码找的多,托管也是由于跨平台原因有微软提出的)。
#pragma managed和#pragma unmanaged是混编的关键所在。
.
#pragma managed
...托管代码...
#pragma unmanaged
...非托管代码
#pragma managed
...托管代码...
#pragma unmanaged
...非托管代码
.
就是这么简单,在一个混编工程中,如果你写的是非托管代码,使用#pragma unmanaged进行声明,如果是托管代码,使用#pragma managed进行声明,生成的工程就是一个混编工程,其中既有托管代码又有非托管代码,工程中的非托管代码和托管代码实现的函数和方法是可以互相调用的。只不过要注意类型,如果是字符串的话,还需要注意编码方式。工程要使用/clr(公共语言支持)就可以了。
既然有了混编工程,那么纯非托管和纯托管工程代码直接的调用就就不成问题了。
这里有的时候会出bug,找不到外部引用,我用vs 2012测试,就是关联工程之间不好使,要手动把生成的库指定到依赖工程的库中,不能通过工程之间的依赖引用来实现。可能是公共语言支持选项对工程引用起到了限定作用吧。
纯非托管 <-> 混编 <-> 纯托管
止于此。。。
VC++ 非托管代码 & 托管代码的更多相关文章
- CLR和.Net对象生存周期
标签:GC .Net C# CLR 前言 1. 基础概念明晰 * 1.1 公告语言运行时 * 1.2 托管模块 * 1.3 对象和类型 * 1.4 垃圾回收器 2. 垃圾回收模型 * 2.1 为什么需 ...
- (ETW) Event Trace for Windows 提高 (含pdf下载)
内容提纲 • 托管代码与非托管代码介绍 • 不安全代码介绍 • 用户模式与内核模式 • ETW执行流程分析 • 日志分析工具介绍:PerfView.exe ETW与非托管代码 • ETW依赖的So ...
- 【C#4.0图解教程】笔记(第1章~第8章)
第1章 C#和.NET框架 1..NET框架的组成 .NET框架由三部分组成(严格来说只有CLR和FCL(框架类库)两部分),如图 执行环境称为:CLR(公共语言运行库),它在运行期管理程序的执行. ...
- 斗地主你什么时候才会托管?(.NET中的托管于非托管)
文章部分引自<.NET4.0面向对象编程漫谈(基础篇)>第1章.NET面向对象编程基础(作者:金旭亮) 无意间看到一位四五岁左右小朋友在玩斗地主,总开始到结束,她一直都在使用“提示”(托管 ...
- CLR和.Net对象
CLR和.Net对象生存周期 前言 1. 基础概念明晰* 1.1 公告语言运行时* 1.2 托管模块* 1.3 对象和类型* 1.4 垃圾回收器 2. 垃圾回收模型* 2.1 为什么需要垃圾回收* 2 ...
- 01-.Net编程机制
.NetFarmwark特点: 多平台:该系统可以在广泛的计算机上运行,包括从服务器.桌面机到PDA和移动电话. 行业标准:该系统使用行业标准的通信协议,比如XML.HTTP.SOAP和WSDL. 安 ...
- IL 学习笔记
先上几篇博客链接: 一步步教你读懂NET中IL(图文详解) C#基础之IL 详解.NET IL代码 C# IL DASM 使用 你必须知道的.NET <C# to IL>.<Expe ...
- 组件与.NET互操作
组件 1.何谓组件技术? 组件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的细节进行了封装,同时对各种业务逻辑规则进行了实现,用于处理用户的内部操作细节,甚至于将安全机 ...
- 06 ASP.net
ASP.net 第一天 理解浏览器与服务器概念,与WinForm的区别. C# IIS(Internet Information Service) 互联网信息服务 Java(Tomcat) Php(A ...
随机推荐
- gpio 預設值
若 gpio 預設值只寫 pull-down or pull-up or no-pull or keeper, 代表 是 input mode.
- usb 2.0 支援的速度
from http://www.usb.org/developers/docs/usb20_docs/ high speed : 480 Mb/s full speed : 12 Mb/s low s ...
- [SaltStack] salt-master启动流程
SaltStack源码阅读 做salt有一段时间了, 一直没从源码层面去理解, 好吧, 开始读读源码 -_- 那就从salt-master的启动开始吧. 启动salt-master方法: /etc/i ...
- .NET 下二维码解决方案
使用Zint和Zxing实现二维码的编码与解码(Using open-source tools to generate and decode Q-R code) 1.Zint生成二维码 http:// ...
- 交换机的MAC地址作用
交换机的MAC地址在交换机进行数据交换时是没有作用的,因为交换机并不对转发的数据帧进行拆包重封装. 如果只是完成数据帧交换,则可以不要MAC地址(仅指二层交换机,三层交换机完成路由功能自然每个端口得有 ...
- 用chardet判断字符编码的方法
转自http://www.cnblogs.com/xiaowuyi/archive/2012/03/09/2387173.html 用chardet判断字符编码的方法 1.chardet下载与安装 ...
- Zabbix4.0安装与入门及常见配置
1.安装zabbix-server 环境: 10.0.0.50 zabbix-server 10.0.0.51 zabbix-web 10.0.0.52 zabbix-agent yum -y ins ...
- 2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
Solution 我们发现, 对于一条路径来说, 花费总时间为\(ap + q\), 其中\(p\)和\(q\)为定值. 对于每个点, 我们有多条路径可以到达, 因此对于每个区间中的\(a\)我们可以 ...
- [转] 使用SVN进行源码管理
原文地址:gyzhao's, 使用SVN进行源码管理(下) 软件下载 1. Viusal SVN, Download(官网),安装该软件之前,请先安装TortoiseSVN,Download. 2. ...
- IOS 暂停和恢复CALayer上的动画(转)
coreAnimation的动画是存在于CALayer上面的,有些时候需要突然暂停某个组件的动画效果,同时保留当前动画的状态, 如果是用removeAnimation会显得很突兀,不够平滑,所以可以利 ...