【C++】C++封装成DLL并调用(初学者快速入门)

简介: 【C++】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,就成功啦!!!!


相关文章
|
6月前
|
C++
C++中的封装、继承与多态:深入理解与应用
C++中的封装、继承与多态:深入理解与应用
142 1
|
5月前
|
缓存 网络协议 Linux
c++实战篇(三) ——对socket通讯服务端与客户端的封装
c++实战篇(三) ——对socket通讯服务端与客户端的封装
101 0
|
2月前
|
数据安全/隐私保护 C语言 C++
C++(七)封装
本文档详细介绍了C++封装的概念及其应用。封装通过权限控制对外提供接口并隐藏内部数据,增强代码的安全性和可维护性。文档首先解释了`class`中的权限修饰符(`public`、`private`、`protected`)的作用,并通过示例展示了如何使用封装实现栈结构。接着介绍了构造器和析构器的使用方法,包括初始化列表的引入以及它们在内存管理和对象生命周期中的重要性。最后,通过分文件编程的方式展示了如何将类定义和实现分离,提高代码的模块化和复用性。
|
3月前
|
存储 C++
C++ dll 传 string 类 问题
C++ dll 传 string 类 问题
25 0
|
4月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
35 2
|
4月前
|
存储 开发框架 Java
|
5月前
|
存储 Java C#
C++语言模板类对原生指针的封装与模拟
C++|智能指针的智能性和指针性:模板类对原生指针的封装与模拟
|
5月前
|
数据安全/隐私保护 C++
C++语言深入理解类的封装与数据隐藏
深入理解类的封装与数据隐藏
|
4月前
|
存储 C++ 容器
【C++】开散列实现unordered_map与unordered_set的封装
【C++】开散列实现unordered_map与unordered_set的封装
46 0
|
6月前
|
存储 C语言 C++
从C语言到C++_31(unordered_set和unordered_map介绍+哈希桶封装)(上)
从C语言到C++_31(unordered_set和unordered_map介绍+哈希桶封装)
54 3