多语言展示
当前在线:1922今日阅读:183今日分享:45

VS2013建立C++ dll库文件

DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。本文介绍了使用VS2013和C++进行动态库的编写,一方面C++运行速度之快大家有目共睹,另一方面,好多技术都是基于C++,如OPENCV ,若是用C++混合编写比其它语言较为容易,使用C++建立动态库公其他语言使用是相当划算的。
工具/原料

VS2013

方法/步骤
1

建立一个C++的Win32DLL,这里要注意选择'Export symbols'导出符号。点击完成。 如下图所示:

2

由于项目的名称是'TestCPPDLL',因此,会自动生成TestCPPDLL.h和TestCPPDLL.cpp两个文件,.h文件是要导出内容的声明文件,为了能清楚的说明问题,我们将TestCPPDLL.h和TestCPPDLL.cpp两个文件中的所有内容都删除,然后在TestCPPDLL.h中添加如下内容:

3

第一行代码中定义了一个名为'TESTCPPDLL_API'的宏,该宏对应的内容是'__declspec(dllexport)'意思是将后面修饰的内容定义为DLL中要导出的内容。当然你也可以不使用这个宏,可以直接将'__declspec(dllexport)'写在要导出的函数前面。第二行中的'EXTERN_C',是在'winnt.h'中定义的宏,在函数前面添加'EXTERN_C'等同于在函数前面添加extern 'C',意思是该函数在编译和连接时使用C语言的方式,以保证函数名字不变。第二行的代码是一个函数的声明,说明该函数可以被模块外部调用,其定义实现在TestCPPDLL.cpp中,TestCPPDLL.cpp的代码如下所示:

4

第三步:在编译C++DLL之前,需要做以下配置,在项目属性对话框中选择'C/C++'|'Advanced',将Compile AS 选项的值改为'C++'。然后确定,并编译。

5

生成的DLL文件如下图所示:

6

第四步:首先,添加一个C#的应用程序,如果要在C#中调用C++的DLL文件,先要在C#的类中添加一个静态方法,并且使用DllImportAttribute对该方法进行修饰,代码如下所示:

7

DllImport中的第一个参数是指明DLL文件的位置,第二个参数'EntryPoint'用来指明对应的C/C++中的函数名称是什么。'extern'关键字表明该处声明的这个Add方法是一个外部调用。该方法声明完毕之后,就可以像调用一个普通的静态方法一样去使用了。下面是示例程序:

8

然后运行该C#程序,其结果如下图所示:

注意事项

亲测,绝对好使

推荐信息