第一步:创建接口类
1.接口类 .h 文件
#ifndef ISmoke_h
#define ISmoke_h
/*
* ISmoke是一个提供给用户调用的头文件
* 对应的库文件为:SmokeDll.dll SmokeDll.lib
*/
class ISmoke
{
public:
ISmoke() {};
virtual ~ISmoke() {};
public:
virtual void sayHello() = 0;
};
//放回实际被调类的指针
ISmoke* __cdecl getSmoke();
//析构实际被调类(getSmoke返回的ISmoke*)
void __cdecl destroySmoke(ISmoke* p);
#endif // !ISmoke_h
2.接口类 .cpp 文件
#include "pch.h"
#include "ISmoke.h"
#include "Smoke.h"
/*
*接口类仅仅实现需要到处的全局函数,目的是用于间接调用实际实现类的方法
*一般仅仅包含一个导出指针函数和一个析构指针函数
*/
ISmoke* __cdecl getSmoke() {
ISmoke* p = new Smoke;
return p;
}
void __cdecl destroySmoke(ISmoke* p) {
if (p)
{
delete p;
}
return;
}
第二步:创建实际被调用的实现类
#ifndef Smoke_h
#define Smoke_h
#include "ISmoke.h"
class Smoke:public ISmoke
{
public:
Smoke() {};
virtual ~Smoke() {};
public:
virtual void sayHello();
};
#endif // !Smoke
#include "pch.h"
#include <iostream>
#include "Smoke.h"
void Smoke::sayHello() {
std::cout << "hello world!" << std::endl;
}
第三步:编写 .def 文件
LIBRARY SmokeDll
EXPORTS
getSmoke @1
destroySmoke @2
第四步:编译生成库文件 SmokeDll.dll、SmokeDll.lib
第五步:外部调用
1.将接口类的头文件(ISmoke.h)加到外部调用的系统工程里,同时,生产的库文件(SmokeDll.dll、SmokeDll.lib)配置到外部调用的系统工程里去。
2.编写调用程序
#include "ISmoke.h"
int main(int argc,char** argv) {
ISmoke* ip = getSmoke();
ip->sayHello();
destroySmoke(ip);
return 0;
}
运行结果如下: