win10DLL的封装——vs2019

本文分为两部分,介绍了vs封装dll的两种不同的方法,经过本人实测都可以跑通,个人推荐方法一

PS:这两种方法都是 dll 封装函数的,没有找到 dll封装类的;需要封装类的场景很少吗,求问?

PS2:C++接口封装及DLL中使用头文件实例_一行一生-CSDN博客_c++ dll 头文件

这篇文章写出了我看到的第三种方法,但是没看到他的文件结构和设置操作,看不太明白,暂时先贴在这里吧

以下为第一种方法

原创文章链接为VS2019封装C++函数为动态链接库DLL_hai_fellow_Z的博客-CSDN博客_vs2019将类封装成一个dll动态链接库,根据该博文的指导,跑通了以后,我写了本文

1、新建DLL项目

win10DLL的封装——vs2019_第1张图片

新建的DLL1项目自带以下四个文件。

win10DLL的封装——vs2019_第2张图片

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 
extern "C" __declspec(dllexport) void test();

#endif //PCH_H

在pch.cpp文件中对函数进行实现。

// pch.cpp: 与预编译标头对应的源文件

#include "pch.h"

// 当使用预编译的头时,需要使用此源文件,编译才能成功。
void test()
{
	std::cout << "yes! " << std::endl;
}

执行之后,弹出以下框。点击确定。

win10DLL的封装——vs2019_第3张图片

3、测试

首先,建立包含main.cpp的工程项目test,对应将生成的动态链接库拷贝到对应文件夹中。

win10DLL的封装——vs2019_第4张图片

其次,添加测试代码。

//修改后的代码
#pragma once
#pragma comment(lib,"Dll1.lib")

#include 
using namespace std;
extern "C" __declspec(dllimport) void test();

int main()
{
	test();
	return 0;
}

 然后,添加依赖库。

win10DLL的封装——vs2019_第5张图片

注意:此处千万不要将.lib写成.dll,否则会出现“ LNK1107 文件无效或损坏”的错误。
最后,执行程序输出结果,说明dll可以成功调用。

win10DLL的封装——vs2019_第6张图片

 注意:在测试使用DLL时候,一定要注意与生成DLL时候的编译方式保持一致,都是在Debug状态下或者保持两者都在Release下。

以上就是第一种方法

——————————————————————————————————————————————————————————————————————分割线

以下为第二种方法

原创文章链接为DLL封装_瞎点技能树-CSDN博客,根据该博文的指导,跑通了以后,我写了本文

1、win10DLL的封装——vs2019_第7张图片

2、

win10DLL的封装——vs2019_第8张图片

3、

win10DLL的封装——vs2019_第9张图片

4、

 win10DLL的封装——vs2019_第10张图片

5、

win10DLL的封装——vs2019_第11张图片

6、

win10DLL的封装——vs2019_第12张图片

7、这一步要注意,新建的文件扩展名记得改成.c

win10DLL的封装——vs2019_第13张图片

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 
 
#define DLL_API extern "C" _declspec(dllexport)
 
/*_declspec(dllexport)才能生成.lib文件*/
_declspec(dllexport) int add(int a, int b) //api函数
{
    return a + b;
}

 9、

win10DLL的封装——vs2019_第14张图片

工程目录下Debug文件夹内,生成.lib和.dll 

10、

其他文件中调用:

复制.h、.lib、.dll到工程目录下

 例如在main函数中调用:

win10DLL的封装——vs2019_第15张图片

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
#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的制作和使用

你可能感兴趣的:(随笔,技术,dll,c++,win10,vs2019)