您的位置:首页 > 编程语言 > C语言/C++

【C++】多个类的 DLL 封装及调用

2014-06-18 08:49 267 查看
【C++】多个类的 DLL 封装及调用

网上大多是将函数封装成 dll 的教程,类的封装也是基本相似的。

创建 DLL

在 VS2010 中新建一个 win32->dll 工程。如我建立的工程名为 FaceDLL

添加 facedll.h 的头文件(里面定义 dll 的接口,调用时会用到)

[cpp] view plaincopy

1. #pragma once

2. #ifdef FaceLIBDLL

3. #define FACEAPI _declspec(dllexport)

4. #else

5. #define FACEAPI _declspec(dllimport)

6. #endif

7. //可以 include 需要用到的头文件

8. #include <opencv2/opencv.hpp>

9.

10. class FACEAPI FaceRecognizer

11. {

12. public:

13. FaceRecognizer();

14. ~FaceRecognizer();

15.

16. /////////////////////////////////////

17. //类的函数

18.

19. };

之后在 facedll.cpp 中写函数实现,而且要定义为 FaceLIBDLL

[cpp] view plaincopy

1. #define FaceLIBDLL

2.

3. #include "stdafx.h"

4. #include "facedll.h"

5. #include <opencv2/opencv.hpp>

6.

7. //////////头文件中函数的实现

本文由西安白癜风专科医院 http://www.xapfb120.com/ 收集,转载请注明出处

本文由西安白癜风专科医院 http://www.xapfb120.com/ 收集,转载请注明出处

8. FaceRecognizer::FaceRecognizer()

9. {

10.

11. }

12.

13. FaceRecognizer::~FaceRecognizer()

14. {

15.

16. }

生成( Build ) 工 程 , 在 debug 文 件 夹 中 会 生 成 相 应 的 DLL 及 LIB 文件:

facedll.dll facedll.lib

多个类封装 DLL

封装好一个类之后,在后面的类可以调用这个类生成的 dll,再封装新类的 dll。

需要在工程中添加需要引用的头文件,如 facedll.h。在 debug 中拷贝 facedll.lib 文件。

在 Properties->Linker->Input-> Additional Dependecies 中添加 facedll.lib(或写全路径:

"..\debug\facedll.lib")

然后一样的方法再封装新的类就可以了~

[cpp] view plaincopy

1. #pragma once

2. #ifdef HEARTLIBDLL

3. #define HEARTAPI _declspec(dllexport)

4. #else

5. #define HEARTAPI _declspec(dllimport)

6. #endif

7.

8. #include <opencv2/opencv.hpp>

9. #include "facedll.h"

10. #include "datadll.h"

11.

12. class HEARTAPI HRMeasure

13. {

14. };

15.

16. }

调用 DLL

调用需要各个 dll 的.h、.dll、.lib 文件。

本文由西安白癜风专科医院 http://www.xapfb120.com/ 收集,转载请注明出处

本文由西安白癜风专科医院 http://www.xapfb120.com/ 收集,转载请注明出处

将头文件添加到工程中,并#include 到需要用的地方。将 lib 文件拷贝到项目中,并

在 Properties->Linker->Input-> Additional Dependecies 中写入:facedll.lib;heartdll.lib。

或者在程序中写入:

[cpp] view plaincopy

1. #pragma comment(lib,"facedll.lib")

2. #pragma comment(lib,"heartdll.lib")

之后程序中就可以直接使用封装成 DLL 的类了:

[cpp] view plaincopy

1. HRMeasure *hrMea=new HRMeasure();

如果已经写好了一个C++的类,希望把它做成dll动态链接库,这里介绍一种简单的方法。

利用VC6新建工程时选择win32 dynamic-Link Library,然后添加头文件和cpp文件。假设类名为exp,添加头文件exp.h,头文件中声明类的定义,添加exp.cpp,其中是成员函数的具 体定义。与一般写类的定义不同,在exp.h中需要写成

class __declspec(dllexport) exp

{

}

从而说明以后从dll要被导出的类是哪一个。这样编译完就会产生exp.dll和exp.lib两个文件。

当已经生成dll后,可以在其它程序中调用dll中的类和成员函数。方法如下:

a)把exp.dll和exp.lib复制到调用程序的执行路径下,注意不是debug路径下。

b)在project->setting->link里添加exp.lib

c)把exp.h复制到调用程序的执行路径下,将__declspec(dllexport)改成__declspec(dllimport)

这样在主程序中就可以使用exp.h中声明的类和它的成员函数了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: