文档章节

VC++ 非托管代码 & 托管代码

Y
 Y13
发布于 2016/05/14 01:40
字数 614
阅读 33
收藏 0

#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测试,就是关联工程之间不好使,要手动把生成的库指定到依赖工程的库中,不能通过工程之间的依赖引用来实现。可能是公共语言支持选项对工程引用起到了限定作用吧。

 

纯非托管  <-> 混编  <->   纯托管

 

止于此。。。

© 著作权归作者所有

共有 人打赏支持
Y

Y13

粉丝 0
博文 30
码字总数 148304
作品 0
大连
高级程序员
《你不常用的c#之二》:略谈GCHandle

我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作。 但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并...

付翔
2016/02/15
0
0
[CLI/C++].NET托管代码和非托管代码的相互调用

场景三:现有C++原代码,包装后供C#调用。 C++的原代码,实际上可以直接编译成托管代码。MFC也好ATL也好……这样看起来在.NET中最强大的编程语言就是C++了:它不仅可以编写托管 程序,甚至可...

Yong_Luo
2010/10/01
0
0
.net 中的托管与非托管

参考文献 关于托管与非托管 到底什么是托管,什么是非托管的研究 前言 最近在看《ASP.NET MVC 4框架揭秘》,里面有很多微软.net的东西,其中就很多次提到了托管与非托管,搞得我云里雾里的,...

嗯哼9925
2017/12/13
0
0
.NET简谈互操作(二:先睹为快)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之释放非托管内存) .NET简谈互操作...

王清培
2011/06/24
0
0
.NET简谈互操作(五:基础知识之Dynamic平台调用)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之Dispose非托管内存) .NET简谈互操...

王清培
2011/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

百度贴吧发送gif图片的限制

百度贴吧中不可以发送超过500k的gif图片,同时尺寸不能超过700个像素。

gugudu
17分钟前
1
0
eclipse中查找所有汉字

今天遇到需要对中文翻译为英文的情况,需要查找一下项目中出现的所有汉字。我们可以使用快捷键Ctrl+H,在搜索一栏输入:[^\x00-\xff],记得勾选正则表达式。 备注: [\x00-\xff] 是 0 - 255的...

hengbao5
19分钟前
2
0
HBase常用操作命令

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,...

飓风2000
23分钟前
1
0
天创恒达TC TC6C0更新固件包

天创恒达TC TC6C0 升级完 登录密码 admin、000000

yizhichao
25分钟前
1
0
阿里云总裁胡晓明:“这些新杭州故事,明天将会在更多城市发生”

摘要: 9月19日,2018杭州·云栖大会现场,杭州城市大脑2.0正式发布,管辖范围扩大28倍,覆盖面积增至420平方公里,相当于65个西湖大小。 ET城市大脑等数字化城市解决方案,掀开了“杭州故事...

阿里云官方博客
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部