【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 的.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中声明的类和它的成员函数了。