VS编译器如何调用动态链接库文件

在我们日常的开发中,难免要使用别人封装的第三方库;那么接下来就跟着我一步步学习如何在VS编译器中调用第三方库吧。

我自己封装了一个简单的dll文件;函数如下所示:

头文件(.h) 

#ifndef  _MYDLL_H
#define _MYDLL_H

#ifdef MYDLL_EXPORTS
#define  MYDLL_API __declspec(dllexport)
#else
#define  MYDLL_API __declspec(dllimport)
#endif 

extern "C" MYDLL_API int add(int a, int b);

#endif

源文件(.cpp)

#include "mydll.h"

extern "C" MYDLL_API int add(int a, int b)
{
	return (a + b);
}

编译成功后生成后,将.h文件,dll文件,lib文件拷贝出来放在同一个文件中,那么接下来就是如何正确的去使用dll文件了。

首先创建一个空白项目后,将上述的文件夹拷贝到该项目下,如下所示:

内部结构如下图所示:

dll文件夹用来存放dll文件,include文件夹用来存放头文件,lib文件夹用来存放lib文件;接下来右键点击项目->属性->常规,弹出如下界面:

点击编辑,将第三方库中的头文件路径包含进去,如下所示:

 这样的话,头文件的路径就已经配置完成了,接下来就是如何配置lib文件的路径了,点击链接器->常规

选中附加库目录,将lib文件的路径包含进去, 

 之后就是考虑如何把lib文件加载进来了,这个简单,点击链接器->输入之后,将库文件输入进去即可,如下图所示:

最后需要把dll文件拷贝到运行工作目录中,即exe运行文件所在目录,你可以手动拷贝,也可以在生成事件->后期生成事件中添加拷贝命令,如下所示:

那么调用动态链接库的整个流程就已经全部搭建完成了, 需要提一下的是,我这边的文件都是根据相对路径去获取的,这样的话,当库文件路径发生改变时,不易出错,如果你想用绝对路径,那当然也是可以的。有兴趣的可以尝试一下。那么接下来就是如何在代码中调用库文件中的函数了,这个时候,头文件就显得举足轻重了,首先把头文件包含进来,之后,便可以直接调用库函数了。代码如下所示:

#include <iostream>
#include "mydll.h"

using namespace std;


int main()
{
	int nNum1 = 10;
	int nNum2 = 20;
	int nSum = add(nNum1, nNum2);

	cout << "调用库函数的nSum = " << nSum << endl;

	system("pause");
	return 0;
}

运行得到的结果如下图所示:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用VS2015编译调用动态链接库dll 1. 首先建工程,选择dll,记得勾上“导出符号” 后面不用自己搞那些宏定义会省事很多。 建立工程myDll,记得勾上“导出符号” 类型选择dll 2. IDE自动生成的代码已经把整个架构弄好了,其中和项目同名的.h和.cpp文件就是我们自己写代码的地方了。我想写的dll是导出一个类,在这里我就直接在它自动生成的CmyDll类上面改了。 myDll.h myDll.cpp 在mydll.h和mydll.cpp中给类添加成员函数 //mydll.h class MYDLL_API CmyDll { public: CmyDll(void); // TODO: 在此添加您的方法。 int myFunction(int a, int b); }; //mydll.cpp int CmyDll::myFunction(int a, int b) { return a*b; } 3.编译的时候我选择了release,这里可以用默认的debug也行 在mydll.h和mydll.cpp中给类添加成员函数 最后生成解决方案后产生的mydll.lib和mydll.dll就是我们需要的二进制文件了。lib文件编译是要用的,而dll是调用这个库的程序运行时需要的。 调用dll 1.重新建立一个工程 这回选择普通的控制台程序就行了。我建了个名为myDllCall的工程。 2.把库的头文件include进来,以及连接lib文件 其中 include进来的 myDll.h 和 **#pragma comment()**的lib根据自己的路径写。 #include "stdafx.h" #include "../../myDll/myDll/myDll.h" //头文件 #pragma comment(lib,"../../myDll/Release/myDll.lib") //调用自己写的外部库 #include int main() { CmyDll mydll; int a, b; std::cin >> a >> b; std::cout << mydll.myFunction(a, b) <> a >> b; std::cout << mydll.myFunction(a, b) << std::endl; return 0; } 3.dll放到可执行文件同一目录下面 刚刚的代码直接编译没问题,运行会报错. 直接编译没问题,运行会报错 原因是dll要和生成的可执行文件在同一个目录下,我把mydll.dll放进去之后就解决了。 我们成功的在自己的工程里调用了外部的类 可以看到我们成功的在自己的工程里调用了外部的类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值