.net core 调用c dll_用C++生成一个简单的DLL文件VS2008

大家好,我是孤帆冒雨行,最近刚入职到一家软件公司从事C++开发工作,在学校学习的编程内容到了工作中是远远不够用的,所以开始了自学之路,但由于我不是计算机科班出身的,所以这条路任重而道远。大家看到我的教程是一步步的来,从如何创建一个项目开始,请大家不要吃惊。

从接触简单的项目开始学起吧,先使用C++创建一个简单的DLL,到后面可以用C++进行调用,因为后面的工作中也需要调用别的公司的DLL。

138c520b77eee111a39c2ccf71cfb71d.png

一、动态链接库(DLL)简介

动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。在Windows中,这种文件被称为应用程序拓展。例如,在 Windows 操作系统中,Comdlg32.dll 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于避免代码重用和促进内存的有效使用。 通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个记账程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。[1]

二、DLL生成的两种方式

在C++中,dll的生成主要有两种方法:一是使用__declspec(dllexport) 创建dll,二是使用模块定义(.def)文件创建dll。

方法1: 使用 __declspec(dllexport) 来创建dll

__declspec是Microsoft VC中专用的关键字,它配合着一些属性可以对标准C/C++进行扩充。__declspec关键字应该出现在声明的前面。

__declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等。

1.创建一个MyDLL项目

首先我们选择创建项目,项目类型选择Visual C++ -> Win32,模板选择Win32项目,在合适的位置创建一个名为MyDLL的项目,单击确定并在弹出的向导中点击下一步。

53d4029b07242b1bbcc4eff72d3ec84d.png

创建一个Win32项目

应用程序类型选择DLL,附加选项选中空项目,单击完成。

8621dc95f37deb607d3ed53b24289dc0.png

类型选择DLL,附加选项选中空项目

在解决方案资源管理器中的源文件上单击右键选择添加->新建项,创建一个名为MyDLL的.cpp文件。

7be77c432c573b545d37bc6e3b804ba3.png

添加->新建项

fdea5a09ba6340b34114e84c2932b15d.png

新建名为MyDLL的.cpp文件

再以同样的方法在头文件上单击右键添加->新建项,创建一个名为MyDLL的.h文件。

94ee16c4e4bc4c66d0635e3967c97526.png

新建名为MydDLL的.h文件

2.添加代码到文件中

复制或输入以下代码到MyDLL.cpp文件中。

//MyDLL.cpp#define DLL_EXPORT#include "MyDLL.h"int add(int a, int b){    return a + b;}int substract(int a, int b){    return a - b ;}

复制或输入以下代码到MyDLL.h文件中

//MyDLL.h#ifdef DLL_EXPORT //如果在工程里已经添加预定义宏      #define MYDLL_EXPORT extern "C" __declspec(dllexport) //那DLLEXPORT就指代__declspec(dllexport) 用于dll的导出#else  //当工程中不包含DLL_EXPORTS预定义时      #define MYDLL_EXPORT extern "C" __declspec(dllimport) //DLLEXPORT 就指代__declspec(dllimport)#endif//extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码MYDLL_EXPORT int add(int a, int b);MYDLL_EXPORT int sub(int a, int b);

3.生成解决方案

在解决方案资源管理器中的解决方案"MyDLL"上单击右键,选择生成解决方案,或者在编写完代码后直接按F7生成解决方案。

bf71eef82181cbbcfb24a95794db6835.png

生成解决方案

4.找到生成的dll文件

接下来就可以在你创建的项目文件夹下的Debug文件夹中找到你生成的MyDLL.dll文件,以及静态库文件MyDLL.lib文件了。

4d02327d06d21094b859483784bc661d.png

找到dll文件

我们使用Depends软件来查看我们刚刚生成的dll文件,在Depends软件中打开我们刚刚生成的dll文件,或者拖动到软件中,我们就可以看到其中我们编写的add和sub功能了。

7af9ad46bb0dc4d4b5db6260d8e0edce.png

查看dll文件

注:Depends软件下载及使用方法请自行百度。

方法2: 使用模块定义(.def)文件创建dll

.def文件(模块定义文件)是包含一个或多个描述各种DLL属性的Module语句的文本文件。.def文件或__declspec(dllexport)都是将公共符号导入到应用程序或从DLL导出函数。如果不提供__declspec(dllexport)导出DLL函数,则DLL需要提供.def文件。

1.创建一个MyDLL项目

与刚才的方法一样创建一个MyDLL项目,但不同的是,我们不用再创建一个MyDLL.h的头文件,而是在源文件中创建一个.def的模块定义文件。具体操作为,在解决方案资源管理器中的源文件上单击右键,选择添加->新建项,新建一个名为MyDLL的.def文件。

80deacab18a556cffce23233deca22c8.png

创建名为MyDLL的.def文件

2.添加代码到文件中

复制或输入以下代码到MyDLL.cpp文件中。

//MyDLL.cppint add(int a, int b){    return a + b;}int sub(int a, int b){    return a - b ;}

复制或输入以下代码到MyDLL.def文件中。

LIBRARY "MyDLL"EXPORTSadd @2sub @1

其中LIBRARY语句用于指定动态链接库的名称,EXPORTS指明需要导出的函数,其中@加数字为导出函数的顺序,顺序可自行修改,也可以不加@数字,则导出的为默认顺序。

3.生成解决方案

以上述同样的方法生成解决方案,这里不再赘述。

4.查看生成的dll文件

在同样的位置找到刚刚生成的dll文件,并使用Depends软件来查看,这回生成的函数中我们可以注意到,函数的顺序号改变了,sub为1,add为2,与我们刚刚在.def模块定义文件中定义的一样。

edb8a0ddfb5666bbcc7f624c1191f3a4.png

查看dll文件


以上就是使用VS2008 C++生成DLL动态库的两种方法,如果有内容写的不全或者不好的地方,请大家指正,或者大家有什么问题也欢迎留言讨论。

对于DLL调用的方式,我们下期再讲,感兴趣的同学可以先自行尝试。

参考资料:

[1]百度百科——.dll

https://baike.baidu.com/item/.dll/2133451?fr=aladdin#2

[2]extern “C”的作用详解

https://www.cnblogs.com/xiangtingshen/p/10980055.html

[3]__declspec(dllexport)与__declspec(dllimport)

https://blog.csdn.net/huangyimo/article/details/81748939

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值