动态链接库
在编写动态链接库时,导出函数有两种指明方式,第一种是使用__declspec(dllexport)说明,第二种是使用 .def文件说明。
编译器在编译导出函数时会对其进行 名字改编,同时根据 调用约定 改编函数名字。
在调用动态链接库时,分为隐式调用即静态调用 和 显示调用即动态调用 两种方式。
在调用动态链接库时,还需对VS工程进行一些设置。
本文只对使用__declspec(dllexport)说明 和 隐式调用的情况进行总结。名字改编和调用约定不涉及。
目录
1.DLL的制作
2.DLL的调用
3.配置VS调用环境:
3.1 在同一解决方案下调用DLL
3.2 调用第三方DLL(隐式调用)
1.DLL的制作
1.建立DLL空工程,并向工程添加.h头文件和.cpp源文件。
2.在头文件中输入如下代码:
#ifdef DLL_IMPLEMENT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
namespace zdd
{
//导出类
class DLL_API SimpleDll
{
public:
SimpleDll();
~SimpleDll();
int add(int x, int y); //简单方法
float add(float a, float b);
int sub(int a, int b);
float sub(float a, float b);
};
}
使用该宏在dll项目内部使用__declspec(dllexport)导出,在dll项目外部使用时,用__declspec(dllimport)导入。宏DLL_IMPLEMENT在xx.cpp源文件中定义。
3.在源文件中输入如下代码:
#define DLL_IMPLEMENT
#include "DLLA.h"
namespace zdd
{
SimpleDll::SimpleDll()
{
}
SimpleDll::~SimpleDll()
{
}
int SimpleDll::add(int x, int y)
{
return x + y;
}
float SimpleDll::add(float a, float b)
{
return a + b;
}
int SimpleDll::sub(int a, int b)
{
return a - b;
}
float SimpleDll::sub(float a, float b)
{
return a - b;
}
}
注意此处的宏定义需要写在#include "DLLA.h"之前,以完成在dll项目内部使用__declspec(dllexport)导出,在dll项目外部使用时,用__declspec(dllimport)导入的功能。
4.build工程,生成 .lib 和 .DLL 文件。
2.DLL的调用
1.新建调用DLL的主程序。
2.在源文件中输入如下代码:
#include<iOStream>
#include "../DLLA/DLLA.h"//dll的头文件。
using namespace std;
int main()
{
int a = 3, b = 4;
float x = 3.0f, y = 4.5f;
zdd::SimpleDll simple;
cout << simple.add(a, b) << endl;
cout << simple.add(x, y) << endl;
cout << simple.sub(a, b) << endl;
cout << simple.sub(x, y) << endl;
system("pause");
return 0;
}
3.此时已写好了调用程序,但是如果编译会出现链接错误。通过配置VS工程可以正确调用DLL。配置方式如下
3.配置VS调用环境:
主要工作:添加头文件目录,添加lib文件目录,将.dll文件与.exe文件放于同一目录下。
3.1 在同一解决方案下调用DLL
- 将DLL的头文件复制到主程序工程目录下,并添加到主程序工程中,并在主函数中包含此头文件。
- 在主程序工程属性中添加DLL工程的引用。
这样在编译主工程时会先编译DLL工程。
3.2 调用第三方DLL(隐式调用)
- 必须提供DLL对应的三个文件分别是:xx.h,xx.lib,xx.dll。
- 将xx.dll放在生成.exe的目录下。
- 隐式调用
- 添加DLL头文件所在目录并在源文件中添加包含头文件:
- 添加.lib文件所在目录:
- 引用xx.lib文件
- 上述2.3步也可以用如下代码代替:
#pragma comment(lib, "simpleDLL/DLLA.lib")
此段代码应该放置在主函数之前。
相关阅读
最近在追明日之子每天疯狂给妹妹点赞,所以尝试下投票界面的制作,分享给大家,这是我发布的第一篇文章,欢迎各位产品前辈批评指正!预览效
DIV界面布局 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>Div布局</title> </head> <body> <!-整个p布局大
在使用excel2013编辑表格的时候,有时候我们需要输入很多相同内容,这时候就可以使用单元格的下拉菜单功能,利用数据有效性来完成方便
M3U本质上说不是音频文件,它是音频文件的列表文件,是纯文本文件。你下载下来打开它,播放软件并不是播放它,而是根据它的记录找到网络
你可能看到过类似下图的地图,作为一个GISer,有没有想过这些图是怎么做出来的。对ArcMap也很熟悉了,但是看到这些地图,第一感觉是用PS