C#调用托管DLL与非托管DLL

首先解释一下,托管DLL和非托管DLL的区别。狭义解释讲,托管DLL就在Dotnet环境生成的DLL文件。非托管DLL不是在Dotnet环境生成的DLL文件。 托管DLL文件,可以在Dotnet环境通过 “添加引用” 的方式,直接把托管DLL文件添加到项目中。然后通过 Using DLL命 名空间,来调用相应的DLL对象 。  非托管DLL文件,在Dotnet环境应用时,通过 DllImport 调用。 C# 调用非托管DLL文件。DLL文件是用C语言编写的。 托管DLL就是能够在公共语言运行库(Common Language Runtime,简称CLR)中能够直接引用的,并且扩展名为“DL

DLL之前使用过几次,但是最近使用时,又出各种问题。最后弄到晚上十二点多了,看到网上一个创建DLL的图解教程,按上面的讲解,成功实现了C#调用自己创建的DLL。之所以耗了这么久时间,是因为我本想凭自己记忆实现DLL创建调用,但是各种问题随即产生。。。(不说了,割了)。。今天上午再次整理,觉得有必要记录。

C#调用DLL,有很多详尽的博客讲解。我此处只记录简单的两种,我在项目中只用到这两种。


一,C#调用托管类型Dll,实际中我是C#调用c#的DLL。其实这个很简单,就是添加引用就可以了。把dll添加到你所写的C#程序引用里。

 

 

 

二,C#调用非托管类代码,实际中我是C#调用C++ DLL..,还是直接上图吧。


1.创建C++ DLL

网上有个图解教程说的很详细,可以照上面做,但是这个教程有个问题。创建DLL时,需要声明导出函数
这里有两种方法声明导出函数:一种是通过使用__declspec(dllexport),添加到需要导出的函数前,进行声明,另外一种就是通过模块定义文件(Module-Definition File即.DEF)来进行声明。后面这个链接中的教程,并未说明这一单,他同时添加了两种做法。我试了,只使用其中一种就可以创建DLL,并且调用成功。http://444492018.blog.163.com/blog/static/11498932420122993358962/

 

 

 

 

 


创建成功后调用DLL.需要把dll相关文件拷贝到你需要调用的程序的bin目录下的debug(release)下。

 

 

 

 

 

 


也可以添加def模块文件,从而申明函数。也是可以的。

 

 

posted @ 2022-08-18 14:49  mapstar  阅读(689)  评论(0编辑  收藏  举报