参考链接:https://blog.csdn.net/xiaowei_cqu/article/details/7737682
1.概述
这篇blog主要是写了如何封装一个类,生成一个dll,lib文件。然后在一个新的工程中来调用这个类。
2.实现
首先新建一个dll工程,这一步的目的是生成dll,lib文件,具体可以参考我前面bolg.
1生成.h文件,这里我命名为time.h,也就是类的标头文件,
#ifndef MYTIME_H
#define MYTTME_H
class __declspec(dllexport) Time;
class Time
{
public:
Time();
void output();
};
#endif
在这里我是用这种方式来导出类的,网上还有如下一种模板,大家可以参考一下。这种方式我的理解就是在后面调用dll文件时候,不用修改我们的标头文件 。
#pragma once
#ifdef FaceLIBDLL
#define FACEAPI _declspec(dllexport)
#else
#define FACEAPI _declspec(dllimport)
#endif
//可以include需要用到的头文件
#include <opencv2/opencv.hpp>
class FACEAPI FaceRecognizer
{
public:
FaceRecognizer();
~FaceRecognizer();
/
//类的函数
};
2.类对应的实现函数:
#include "stdafx.h"
#include "time.h"
#include<iostream>
Time::Time()
{}
void Time::output()
{
using namespace std;
cout << "今天是2018年10月8号,世界你好~~!!!" << endl;
cout << "这是一个成功地类!!" << endl;
}
这是类对应函数的实现,这里我命名为time.cpp。然后进行编译,我们可以在工程目录debug下面找到dll,lib文件。
3.调用dll文件。
类和一般的函数封库,在这里有点不同,这里多了一个.h文件,如果我们只是一个简单的函数来封库,我们可以只要有dll,lib文件就可以了,但是在这里,我们有.h. lib dll文件三个。dll 和lib文件处理方式和之前相同,具体可以参考我前面blog。这里主要说的是.h文件的处理。网上称这一步是类的导出,具体的定义我也在书上面看到。废话不多说,新建一个工程,添加一个标头文件,这里我还是用time.h来命名。
#ifndef MYTIME_H
#define MYTTME_H
class __declspec(dllimport) Time;
class Time
{
public:
Time();
void output();
};
#endif
这里标头文件起的作用是接口作用,与一般函数不同的是,函数的接口比较简单,类的接口比较多。从另外一个方面来说,标准的封装是应该有.h文件的,这一别人才能看到我们dll文件里面封装的是什么,根据,h文件来使用我们的封装。
测试程序如下:
#include "stdafx.h"
#include"time.h"
int main()
{
Time c;
c.output();
return 0;
}
这里我们可以很容易的用一个类,代码也很简洁。
4.总结
这篇blog主要是总结了.h .dll .lib 三个文件的封装和怎么使用dll文件,主要是起一个笔记作用,也给各位参考一下。如果有什么不明白的可以@我,特别提醒,如果是刚开始封库,可以看看我前面一篇blog。