C++封装成DLL并调用的实现

 更新时间:2023年03月01日 15:34:49   作者:米码收割机  
本文主要介绍了C++封装成DLL并调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

使用vs2019将C++封装成DLL并调用主要有以下几个步骤:

1)新建工程,编写要封装的.cpp和.h文件;
2) 生成动态链接库.dll和静态链接库.lib;
3) 调用通过.h文件调用;

第一步:编写.cpp和.h文件

本例工程名称为RunLIB

.cpp如下:

#include "pch.h"
#include<iostream>
class FHello :public IInterface
{
public:
	FHello();
	virtual void Init();
	virtual void Destroy();
	virtual char* GetName();

private:
	char name[1024];

};

FHello::FHello()
{
	memset(name, 0, 1024);
	strcpy(name, "hello");
}

void FHello::Init()
{
	printf("FHello::Init\n");
}

void FHello::Destroy()
{
	printf("FHello::Destroy\n");
}

char* FHello::GetName()
{
	return name;
}

IInterface* IInterface::CreateInterface()
{
	return new FHello();
}

.h如下:

#ifndef PCH_H
#define PCH_H
#define _CRT_SECURE_NO_WARNINGS

#define FENGZHUANGCPP_API __declspec(dllexport) //导出

//动态链接库
class FENGZHUANGCPP_API IInterface
{
public:
	static IInterface* CreateInterface();
	virtual void Init() = 0;
	virtual void Destroy() = 0;
	virtual char *GetName() = 0;
};

#endif //PCH_H

第二步:生成动态链接库.dll和静态链接库.lib

①右键解决方案资源管理器的工程名称>>属性>>属性配置>>常规>>配置类型,将配置类型选为动态库(.dll),点击确定

②右键解决方案资源管理器的工程名称,选择生成
③右键解决方案资源管理器的工程名称>>属性>>属性配置>>常规>>配置类型,将配置类型选为静态库(.lib),点击确定

④右键解决方案资源管理器的工程名称,选择生成
此时,会在工程路径下的x64\Debug文件夹中看到你所生成的.dll和.lib文件(比如我的在:E:\C++\RunLIB\x64\Debug路径中)

到这里,我们已经完成了封装的过程,那么我们应该如何调用我们的接口呢?

第三步:调用通过.h文件调用;

①将生成的.dll和.lib,以及pch.cpp放在一个名为dllib的文件夹中(为了后面调用)
②使用vs新建一个名为diaoyong的工程(同时会自动生成一个diaoyong.cpp),将①的文件夹复制到工程目录下

③在diaoyong.cpp输入调用的代码

#include "dlllib/pch.h"
#include <iostream>
using namespace std;
#pragma comment(lib,"dLLL.lib")
//动态库在运行时,会把代码链接到目标
//静态库在编译期,会把代码链接到目标

int main()
{
    IInterface* IF = IInterface::CreateInterface();
    cout << IF->GetName() << endl;
    IF->Init();
    IF->Destroy();
    return 0;
}

此时,运行会出现如下报错,是因为我们没有把包含.lib的文件夹路径加载进来,我们需要执行的操作:
1)右键解决方案资源管理器的工程名称>>属性>>配置属性>>C/C++>>附加包含目录>>编辑>>.lib文件的路径放进去
2)右键解决方案资源管理器的工程名称>>属性>>项目属性>>配置属性>>链接器>>附加库目录>>编辑>>.lib文件的路径放进去

加载完成后,在运行我们编写的diaoyong.cpp,就成功啦!!!!

到此这篇关于C++封装成DLL并调用的实现的文章就介绍到这了,更多相关C++封装成DLL并调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++如何在变量前面加#

    C++如何在变量前面加#

    这篇文章主要介绍了C++如何在变量前面加#问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C++实现管理系统的示例代码

    C++实现管理系统的示例代码

    这篇文章主要介绍了C++实现管理系统的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • C++超详细分析优化排序算法之堆排序

    C++超详细分析优化排序算法之堆排序

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将通过图片详细介绍堆排序,需要的可以参考一下
    2023-02-02
  • 利用C++编写一个Json解析器

    利用C++编写一个Json解析器

    这篇文章主要为大家详细介绍了如何利用C++编写一个简单又好用的Json解析器,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-03-03
  • VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法

    VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法

    Visual Studio Code是一款免费开源的现代化轻量级代码编辑器,支持语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,这篇文章主要介绍了VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言,需要的朋友可以参考下
    2020-03-03
  • QT中QChart绘制折线图

    QT中QChart绘制折线图

    本文主要介绍了QChart绘制折线图,Qt Charts基于Qt的Graphics View架构,其核心组件是QChartView 和 QChart,感兴趣的可以了解一下
    2022-04-04
  • C语言实现导航功能

    C语言实现导航功能

    这篇文章主要为大家详细介绍了C语言实现导航功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 浅析C++内存布局

    浅析C++内存布局

    本文给大家介绍了C++内存布局的相关知识,通过进程间通信比线程间通信难也是因为进程间的用户空间是相互隔离的,无法相互访问,需要通过进程间通信方式通信,通过内核地址空间
    2021-10-10
  • OpenCV+Qt实现图像处理操作

    OpenCV+Qt实现图像处理操作

    这篇文章主要为大家详细介绍了OpenCV+Qt实现图像处理操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 纯c语言优雅地实现矩阵运算库的方法

    纯c语言优雅地实现矩阵运算库的方法

    本文主要介绍了纯c语言优雅地实现矩阵运算库,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论