c++动态库调用的实现

 更新时间:2022年07月01日 11:05:26   作者:朦胧的心一样不平凡  
本文主要介绍了c++动态库调用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在平时的开发中某些情况,动态库和静态库是程序开发的不二法门,例如封装一个库,供别人调用(日志库、字符串处理库、设备信息采集库等),比如接入第三方系统或者平台,等等是非常重要的,笔者最早接触的MFC时就有dll(VC++深入详解)及鸡啄米的MFC环节,后面随着QT的盛行(国产化的推进),QT开始广泛应用,里面也有动态库,就笔者最近的项目为例,这里记录下从库的生成到最后的调用;

一、生成dll

1.安装vs开发工具(2017);

2.新建c++ dll 工程;

3.实现.h和.cpp,将新建默认的.h和.cpp移除;

OSCommonDefine.h

#ifndef __BASE_OSCOMMONDEFINE_H__
#define __BASE_OSCOMMONDEFINE_H__
 
#define AT_DLLEXPORT __declspec(dllexport)
 
#endif // __BASE_OSCOMMONDEFINE_H__

CStringUtils.h

//-----------------------------------------------------------------------------
// Copyright (c) 2022, xxx
// All rights reserved.
//
// 摘要: CStringUtils.h 字符串工具类声明
// 当前版本: 1.0
// 作者: Zhang Lei
// 日期:2022.06.28
// 版本说明:类初始版本实现
//-----------------------------------------------------------------------------
 
#ifndef __BASE_CSTRINGUTILS_H__
#define __BASE_CSTRINGUTILS_H__
 
#include "OSCommonDefine.h"
#include <string>
#include <vector>
using namespace std;
 
// CStringUtils类定义
class AT_DLLEXPORT CStringUtils
{
public:
    // 字符串转大写
    static string& ToUpper(string& strContent);
    // 字符串转小写
    static string& ToLower(string& strContent);
    // 字符串忽略大小写比较
    static int CompareNoCase(const string& strContent, const string& strContentCmp);
};
 
#endif // __BASE_CSTRINGUTILS_H__

 CStringUtils.cpp

//-----------------------------------------------------------------------------
// Copyright (c) 2022, xxx
// All rights reserved.
//
// 摘要: CStringUtils.h 字符串工具类声明
// 当前版本: 1.0
// 作者: Zhang Lei
// 日期:2022.06.28
// 版本说明:类初始版本实现
//-----------------------------------------------------------------------------
 
#include <string>
#include <algorithm>
#include "../../include/CStringUtils.h"
using namespace std;
 
//-----------------------------------------------------------------------------
// 功能: 字符串转大写
// 参数:
// strContent: 待转的字符串
// 返回值: 返回转换后字符串的引用对象
// 创建者: Zhang Lei
// 日期:2022.06.28
//-----------------------------------------------------------------------------
string& CStringUtils::ToUpper(string& strContent)
{
    transform(strContent.begin(), strContent.end(), strContent.begin(), ::toupper);
    return strContent;
}
 
//-----------------------------------------------------------------------------
// 功能: 字符串转小写
// 参数:
// strContent: 待转的字符串
// 返回值: 返回转换后字符串的引用对象
// 创建者: Zhang Lei
// 日期:2022.06.28
//-----------------------------------------------------------------------------
string& CStringUtils::ToLower(string& strContent)
{
    transform(strContent.begin(), strContent.end(), strContent.begin(), ::tolower);
    return strContent;
}
 
//-----------------------------------------------------------------------------
// 功能: 字符串忽略大小写比较
// 参数: strContent 字符串 strContentCmp 比较的字符串
// 返回值: 比较结果
// 创建者: 2022.06.28
// 创建日期: 2022.06.28
//-----------------------------------------------------------------------------
int CStringUtils::CompareNoCase(const string& strContent, const string& strContentCmp)
{
#if defined(_WIN32)
    return _stricmp(strContent.c_str(), strContentCmp.c_str());
#elif defined(__linux__)
    return strcasecmp(strContent.c_str(), strContentCmp.c_str());
#endif
}

4.生成dll,编译报错;

 去掉预编译头

成功

5.说明:

一般要将.h和.cpp分开,毕竟.h是对外调用的,要和管理;

二、调用dll

1.新建测试程序,这里新建一个控制台应用程序;

2.调用:

#include <iostream>
#include "../../include/CStringUtils.h"
 
int main()
{
	std::string str = "I love China";
 
	std::cout << "Hello World!\n";
	std::cout << CStringUtils::ToUpper(str) << std::endl;
	std::cout << CStringUtils::ToLower(str) << std::endl;
}

在工程中设置调用库名和路径: 

 4.成功输出:

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

相关文章

  • C++之谈谈构造函数的初始化列表

    C++之谈谈构造函数的初始化列表

    构造函数主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用,这篇文章详细介绍了构造函数的初始化列表,文章中有详细的示例代码,感兴趣的同学可以参考阅读
    2023-04-04
  • 探讨C语言中关键字volatile的含义

    探讨C语言中关键字volatile的含义

    本篇文章是对C语言中关键字volatile的含义进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言递归实现扫雷游戏

    C语言递归实现扫雷游戏

    这篇文章主要为大家详细介绍了C语言递归实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++中delete和delete[]的区别详细介绍

    C++中delete和delete[]的区别详细介绍

    一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论,拿出来和大家分享一下
    2012-11-11
  • C++基于控制台实现的贪吃蛇小游戏

    C++基于控制台实现的贪吃蛇小游戏

    这篇文章主要介绍了C++基于控制台实现的贪吃蛇小游戏,实例分析了贪吃蛇游戏的原理与C++实现技巧,是非常经典的游戏算法,需要的朋友可以参考下
    2015-04-04
  • C++链式二叉树深入分析

    C++链式二叉树深入分析

    二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址
    2022-06-06
  • Qt实现两个独立窗口的信号通信

    Qt实现两个独立窗口的信号通信

    这篇文章主要为大家详细介绍了Qt实现两个独立窗口的信号通信,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++ 匈牙利算法案例分析详解

    C++ 匈牙利算法案例分析详解

    这篇文章主要介绍了C++ 匈牙利算法案例分析详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C/C++获取Windows平台CPU占用率的方法

    C/C++获取Windows平台CPU占用率的方法

    最近在做系统信息相关的接口,为了实现跨平台,故在linux和Windows平台获取占用率信息,文章主要介绍Windows下的方法,文中给出了参考代码,需要的朋友可以参考下
    2023-12-12
  • C++实现字符串和整数的相互转换

    C++实现字符串和整数的相互转换

    这篇文章主要为大家详细介绍了C++实现字符串和整数的相互转换的方法,文中的示例代码讲解详细,对我们学习C++有一定的帮助,需要的可以参考一下
    2023-01-01

最新评论