本文分为两部分,介绍了vs封装dll的两种不同的方法,经过本人实测都可以跑通,个人推荐方法一
PS:这两种方法都是 dll 封装函数的,没有找到 dll封装类的;需要封装类的场景很少吗,求问?
PS2:C++接口封装及DLL中使用头文件实例_一行一生-CSDN博客_c++ dll 头文件
这篇文章写出了我看到的第三种方法,但是没看到他的文件结构和设置操作,看不太明白,暂时先贴在这里吧
以下为第一种方法
原创文章链接为VS2019封装C++函数为动态链接库DLL_hai_fellow_Z的博客-CSDN博客_vs2019将类封装成一个dll动态链接库,根据该博文的指导,跑通了以后,我写了本文
1、新建DLL项目
新建的DLL1项目自带以下四个文件。
2、填充pch.h和pch.cpp文件
首先,在pch.h文件中,利用extern "C" __declspec(dllexport) void test();
语句对要生成Dll
的函数Test
进行声明。
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#include "framework.h"
#include <iostream>
extern "C" __declspec(dllexport) void test();
#endif //PCH_H
在pch.cpp文件中对函数进行实现。
// pch.cpp: 与预编译标头对应的源文件
#include "pch.h"
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
void test()
{
std::cout << "yes! " << std::endl;
}
执行之后,弹出以下框。点击确定。
3、测试
首先,建立包含main.cpp的工程项目test,对应将生成的动态链接库拷贝到对应文件夹中。
其次,添加测试代码。
//修改后的代码
#pragma once
#pragma comment(lib,"Dll1.lib")
#include <iostream>
using namespace std;
extern "C" __declspec(dllimport) void test();
int main()
{
test();
return 0;
}
然后,添加依赖库。
注意:此处千万不要将.lib写成.dll,否则会出现“ LNK1107 文件无效或损坏”的错误。
最后,执行程序输出结果,说明dll可以成功调用。
注意:在测试使用DLL时候,一定要注意与生成DLL时候的编译方式保持一致,都是在Debug状态下或者保持两者都在Release下。
以上就是第一种方法
——————————————————————————————————————————————————————————————————————分割线
以下为第二种方法
原创文章链接为DLL封装_瞎点技能树-CSDN博客,根据该博文的指导,跑通了以后,我写了本文
1、
2、
3、
4、
5、
6、
7、这一步要注意,新建的文件扩展名记得改成.c
8、.h:
#ifndef __MYDLL_H//条件编译
#define __MYDLL_H
#define DLL_API extern "C" _declspec (dllimport)
DLL_API _declspec(dllexport) int add(int a, int b);//API声明
/*_declspec(dllexport)才能生成.lib文件*/
#endif
.c:
#include <stdio.h>
#define DLL_API extern "C" _declspec(dllexport)
/*_declspec(dllexport)才能生成.lib文件*/
_declspec(dllexport) int add(int a, int b) //api函数
{
return a + b;
}
9、
工程目录下Debug文件夹内,生成.lib和.dll
10、
其他文件中调用:
复制.h、.lib、.dll到工程目录下
例如在main函数中调用:
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include "head.h"
#pragma comment (lib, "DLL_test.lib")
using namespace std;
int main()
{
int num1 = 10;
int num2 = 15;
int result = add(num1, num2);
cout << result << endl;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
以上就是dll的制作和使用