c++動(dòng)態(tài)庫(kù)調(diào)用的實(shí)現(xiàn)
在平時(shí)的開(kāi)發(fā)中某些情況,動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)是程序開(kāi)發(fā)的不二法門,例如封裝一個(gè)庫(kù),供別人調(diào)用(日志庫(kù)、字符串處理庫(kù)、設(shè)備信息采集庫(kù)等),比如接入第三方系統(tǒng)或者平臺(tái),等等是非常重要的,筆者最早接觸的MFC時(shí)就有dll(VC++深入詳解)及雞啄米的MFC環(huán)節(jié),后面隨著QT的盛行(國(guó)產(chǎn)化的推進(jìn)),QT開(kāi)始廣泛應(yīng)用,里面也有動(dòng)態(tài)庫(kù),就筆者最近的項(xiàng)目為例,這里記錄下從庫(kù)的生成到最后的調(diào)用;
一、生成dll
1.安裝vs開(kāi)發(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
// 版本說(shuō)明:類初始版本實(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)大寫(xiě)
static string& ToUpper(string& strContent);
// 字符串轉(zhuǎn)小寫(xiě)
static string& ToLower(string& strContent);
// 字符串忽略大小寫(xiě)比較
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
// 版本說(shuō)明:類初始版本實(shí)現(xiàn)
//-----------------------------------------------------------------------------
#include <string>
#include <algorithm>
#include "../../include/CStringUtils.h"
using namespace std;
//-----------------------------------------------------------------------------
// 功能: 字符串轉(zhuǎn)大寫(xiě)
// 參數(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)小寫(xiě)
// 參數(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;
}
//-----------------------------------------------------------------------------
// 功能: 字符串忽略大小寫(xiě)比較
// 參數(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.說(shuō)明:
一般要將.h和.cpp分開(kāi),畢竟.h是對(duì)外調(diào)用的,要和管理;
二、調(diào)用dll
1.新建測(cè)試程序,這里新建一個(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)用庫(kù)名和路徑:


4.成功輸出:

到此這篇關(guān)于c++動(dòng)態(tài)庫(kù)調(diào)用的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)c++動(dòng)態(tài)庫(kù)調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++?Qt?Tree與Tab組件實(shí)現(xiàn)分頁(yè)菜單功能
這篇文章主要介紹了C/C++?Qt?Tree與Tab組件實(shí)現(xiàn)分頁(yè)菜單功能,實(shí)現(xiàn)一個(gè)類似于樹(shù)形菜單欄的功能,當(dāng)用戶點(diǎn)擊菜單欄中的選項(xiàng)時(shí)則會(huì)跳轉(zhuǎn)到不同的頁(yè)面上,本文簡(jiǎn)單給大家分享實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧2021-11-11
C/C++ Qt TreeWidget 嵌套節(jié)點(diǎn)操作使用
本文主要介紹了TreeWidget的如何使用,實(shí)現(xiàn)對(duì)樹(shù)形框多節(jié)點(diǎn)的各種操作,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C語(yǔ)言結(jié)構(gòu)體嵌套與對(duì)齊超詳細(xì)講解
這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體嵌套與對(duì)齊,C語(yǔ)言中結(jié)構(gòu)體是一種構(gòu)造類型,和數(shù)組、基本數(shù)據(jù)類型一樣,可以定義指向該種類型的指針。結(jié)構(gòu)體指針的定義類似其他基本數(shù)據(jù)類型的定義2022-12-12
C++空類及沒(méi)有成員變量的類的大小實(shí)例分析
這篇文章主要介紹了C++空類及沒(méi)有成員變量的類的大小,對(duì)于初學(xué)者更好的了解C++的指針及類的存儲(chǔ)結(jié)構(gòu)很有幫助,需要的朋友可以參考下2014-07-07
C語(yǔ)言中sizeof()與strlen()函數(shù)的使用入門及對(duì)比
這篇文章主要介紹了C語(yǔ)言中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語(yǔ)言中數(shù)組的一些基本知識(shí)小結(jié)
這篇文章主要介紹了C語(yǔ)言中數(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

