win10DLL的封装——vs2019

22 篇文章 0 订阅
2 篇文章 0 订阅

本文分为两部分,介绍了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的制作和使用

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值