动态链接库的制作和使用

 

在编写动态链接库时,导出函数有两种指明方式,第一种是使用__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

  1. 将DLL的头文件复制到主程序工程目录下,并添加到主程序工程中,并在主函数中包含此头文件。
  2. 在主程序工程属性中添加DLL工程的引用。

这样在编译主工程时会先编译DLL工程。

 

3.2 调用第三方DLL(隐式调用)

  1. 必须提供DLL对应的三个文件分别是:xx.h,xx.lib,xx.dll。
  2. 将xx.dll放在生成.exe的目录下。
  3. 隐式调用
  •  添加DLL头文件所在目录并在源文件中添加包含头文件:
  • 添加.lib文件所在目录:
  • 引用xx.lib文件
  • 上述2.3步也可以用如下代码代替:

            #pragma comment(lib, "simpleDLL/DLLA.lib")

            此段代码应该放置在主函数之前。

 

 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值