什么是非托管dll,C调用C非托管dll
成都创新互联专注于玉龙网站建设服务及定制,我们拥有丰富的企业做网站经验。热诚为您提供玉龙营销型网站建设,玉龙网站制作、玉龙网页设计、玉龙网站官网定制、小程序设计服务,打造玉龙网络公司原创品牌,更为您提供玉龙网站排名全网营销落地服务。
本文目录一览
1,C调用C非托管dll
添加引用试试
所谓托管代码,那就是由运行时自动处理内存的,如c#写的(非安全性的除外)都是托管代码。有垃圾回收机制来对内存进行管理。你调用c++的,那这个一定是非托管代码,.net运行时无法对pinvoke的代码进行内存管理。需要你自己对内存进行回收。c++的dll还要调用其他dll时,这个也是非托管的。
恩.dll放到bin\debug目录里面去.
2,C中的非托管代码是什么
分析:非托管代码(Unmanaged Code)是指直接编译成目标计算机的机器码,这些代码只能运行在编译出这些代码的计算机上,或者是其他相同处理器或者几乎一样处理器的计算机上。非托管代码不能享受公共语言运行库所提供的一些服务,例如内存管理、安全管理等。如果非托管代码需要进行内存管理等服务,就必须显式地调用操作系统的接口,通常非托管代码调用Windows SDK所提供的API来实现内存管理。非托管程序也可以通过调用COM接口来获取操作系统服务。注意:C#跟Visual Studio平台的其他编程语言不一样的是,C#可以创建托管程序与非托管程序。当创建的项目选择名字以MFC,ATL或者Win32开头的项目类型,那么这个项目所产生的就是非托管程序。总结:非托管代码(Unmanaged Code)不由CLR公共语言运行库执行,而是由操作系统直接执行的代码。
c#里都是托管,而且是他的专有名词,.net中都是托管的环境
非托管一般是c++或其他的语言写的,比如系统api的调用就是非托管[dllimport("user32.dll")]这个就是非托管
这是最基本的解释,我是这么理解的。。。
如果更具体点,可以去百度百科看看托管,或google一下很多的
3,托管DLL和非托管DLL的区别
托管代码 (managed code) :由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。Unmanaged Code - 非托管代码 :在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。非托管代码的英文名是Unmanaged Code ,它是在公共语言运行库环境的外部,由操作系统直接执行的代码。
哎,本来一个很简单的问题总是被人弄得这么复杂。c#里调用非托管的dll要使用p/invoke平台调用技术,简单的说就是使用前先声明。例如在kernel32动态链接库中有个函数叫writeprivateprofilestring,那么,使用它之前就必须这样 [dllimport("kernel32")] private static extern long writeprivateprofilestring(string section,string key,string val,string filepath);上面叫原型声明,然后就可以按普通函数的方法使用上面的函数了。loadlibrary等这些函数不是.net的,是vb6 vc6的用法,你是学c#的,那些对你没用。
当前文章:什么是非托管dll,C调用C非托管dll
文章来源:http://hbruida.cn/article/epgdsj.html