c++動(dòng)態(tài)庫調(diào)用的實(shí)現(xiàn)
在平時(shí)的開發(fā)中某些情況,動(dòng)態(tài)庫和靜態(tài)庫是程序開發(fā)的不二法門,例如封裝一個(gè)庫,供別人調(diào)用(日志庫、字符串處理庫、設(shè)備信息采集庫等),比如接入第三方系統(tǒng)或者平臺(tái),等等是非常重要的,筆者最早接觸的MFC時(shí)就有dll(VC++深入詳解)及雞啄米的MFC環(huán)節(jié),后面隨著QT的盛行(國產(chǎn)化的推進(jìn)),QT開始廣泛應(yīng)用,里面也有動(dòng)態(tài)庫,就筆者最近的項(xiàng)目為例,這里記錄下從庫的生成到最后的調(diào)用;
一、生成dll
1.安裝vs開發(fā)工具(2017);
2.新建c++ dll 工程;

3.實(shí)現(xiàn).h和.cpp,將新建默認(rèn)的.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 字符串工具類聲明
// 當(dāng)前版本: 1.0
// 作者: Zhang Lei
// 日期:2022.06.28
// 版本說明:類初始版本實(shí)現(xiàn)
//-----------------------------------------------------------------------------
#ifndef __BASE_CSTRINGUTILS_H__
#define __BASE_CSTRINGUTILS_H__
#include "OSCommonDefine.h"
#include <string>
#include <vector>
using namespace std;
// CStringUtils類定義
class AT_DLLEXPORT CStringUtils
{
public:
// 字符串轉(zhuǎn)大寫
static string& ToUpper(string& strContent);
// 字符串轉(zhuǎn)小寫
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 字符串工具類聲明
// 當(dāng)前版本: 1.0
// 作者: Zhang Lei
// 日期:2022.06.28
// 版本說明:類初始版本實(shí)現(xiàn)
//-----------------------------------------------------------------------------
#include <string>
#include <algorithm>
#include "../../include/CStringUtils.h"
using namespace std;
//-----------------------------------------------------------------------------
// 功能: 字符串轉(zhuǎn)大寫
// 參數(shù):
// strContent: 待轉(zhuǎn)的字符串
// 返回值: 返回轉(zhuǎn)換后字符串的引用對(duì)象
// 創(chuàng)建者: Zhang Lei
// 日期:2022.06.28
//-----------------------------------------------------------------------------
string& CStringUtils::ToUpper(string& strContent)
{
transform(strContent.begin(), strContent.end(), strContent.begin(), ::toupper);
return strContent;
}
//-----------------------------------------------------------------------------
// 功能: 字符串轉(zhuǎn)小寫
// 參數(shù):
// strContent: 待轉(zhuǎn)的字符串
// 返回值: 返回轉(zhuǎn)換后字符串的引用對(duì)象
// 創(chuàng)建者: Zhang Lei
// 日期:2022.06.28
//-----------------------------------------------------------------------------
string& CStringUtils::ToLower(string& strContent)
{
transform(strContent.begin(), strContent.end(), strContent.begin(), ::tolower);
return strContent;
}
//-----------------------------------------------------------------------------
// 功能: 字符串忽略大小寫比較
// 參數(shù): strContent 字符串 strContentCmp 比較的字符串
// 返回值: 比較結(jié)果
// 創(chuàng)建者: 2022.06.28
// 創(chuàng)建日期: 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,編譯報(bào)錯(cuò);

去掉預(yù)編譯頭

成功

5.說明:
一般要將.h和.cpp分開,畢竟.h是對(duì)外調(diào)用的,要和管理;
二、調(diào)用dll
1.新建測試程序,這里新建一個(gè)控制臺(tái)應(yīng)用程序;

2.調(diào)用:
#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;
}在工程中設(shè)置調(diào)用庫名和路徑:


4.成功輸出:

到此這篇關(guān)于c++動(dòng)態(tài)庫調(diào)用的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)c++動(dòng)態(tài)庫調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++?Qt?Tree與Tab組件實(shí)現(xiàn)分頁菜單功能
這篇文章主要介紹了C/C++?Qt?Tree與Tab組件實(shí)現(xiàn)分頁菜單功能,實(shí)現(xiàn)一個(gè)類似于樹形菜單欄的功能,當(dāng)用戶點(diǎn)擊菜單欄中的選項(xiàng)時(shí)則會(huì)跳轉(zhuǎn)到不同的頁面上,本文簡單給大家分享實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧2021-11-11
C/C++ Qt TreeWidget 嵌套節(jié)點(diǎn)操作使用
本文主要介紹了TreeWidget的如何使用,實(shí)現(xiàn)對(duì)樹形框多節(jié)點(diǎn)的各種操作,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C語言結(jié)構(gòu)體嵌套與對(duì)齊超詳細(xì)講解
這篇文章主要介紹了C語言結(jié)構(gòu)體嵌套與對(duì)齊,C語言中結(jié)構(gòu)體是一種構(gòu)造類型,和數(shù)組、基本數(shù)據(jù)類型一樣,可以定義指向該種類型的指針。結(jié)構(gòu)體指針的定義類似其他基本數(shù)據(jù)類型的定義2022-12-12
C語言中sizeof()與strlen()函數(shù)的使用入門及對(duì)比
這篇文章主要介紹了C語言中sizeof()與strlen()函數(shù)的使用入門及對(duì)比,同時(shí)二者在C++中的使用情況也基本上同理,是需要的朋友可以參考下2015-12-12
C/C++編程判斷String字符串是否包含某個(gè)字符串實(shí)現(xiàn)示例
這篇文章主要為大家介紹了C++編程中判斷String字符串是否包含某個(gè)字符串的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
C語言中數(shù)組的一些基本知識(shí)小結(jié)
這篇文章主要介紹了C語言中數(shù)組的一些基本知識(shí)小結(jié),其中重點(diǎn)是對(duì)于數(shù)組的內(nèi)存分配相關(guān)方面的知識(shí)整理,需要的朋友可以參考下2016-04-04
C++調(diào)用C#的DLL實(shí)現(xiàn)方法
這篇文章主要介紹了C++調(diào)用C#的DLL實(shí)現(xiàn)方法,很有實(shí)用價(jià)值,需要的朋友可以參考下2014-07-07

