创建dll调用,相当于黑盒,他人只能调用接口而看不到里面具体代码。
步骤:
1、首先创建dll项目,在这里我的项目名为dll_demo1,项目自动生成pch.h和framework.h以及pch.cpp和dllmain.cpp
2、在pch.h中定义接口,在这里我创建了一个类MyAge(之前类名前没有加__declspec(dllexport)后面未生成.lib)
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#include "framework.h"
class __declspec(dllexport) MyAge {
public:
MyAge(int age=0) {
this->age = age;
}
static MyAge* Instance();
int getAge();
private:
static MyAge *self;
int age;
};
#endif //PCH_H
3、在pch.cpp中实现接口内容
// pch.cpp: 与预编译标头对应的源文件
#include "pch.h"
#include <iostream>
MyAge* MyAge::self = nullptr;
MyAge* MyAge::Instance()
{
if (self == nullptr) {
self = new MyAge;
}
return self;
}
int MyAge::getAge()
{
return this->age;
}
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
4、然后生成解决方案,在dll_demo1下的Debug中生成了.dll以及.lib
5、创建一个新的项目,这里名叫usedll_demo1,把上面的dll_demo1.dll和dll_demo1.lib以及pch.h和framework.h放到usedll_demo1工程目录下
6、在项目“属性”------“链接器”------“输入”------“附加依赖性”添加dll_demo1.lib
7、最后进行在usedll_demo1.cpp中进行调试
#include "pch.h"
#include <iostream>
using namespace std;
int main() {
cout<< MyAge::Instance()->getAge();
return 0;
}