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ā)的不二法門(mén),例如封裝一個(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 字符串工具類(lèi)聲明 // 當(dāng)前版本: 1.0 // 作者: Zhang Lei // 日期:2022.06.28 // 版本說(shuō)明:類(lèi)初始版本實(shí)現(xiàn) //----------------------------------------------------------------------------- #ifndef __BASE_CSTRINGUTILS_H__ #define __BASE_CSTRINGUTILS_H__ #include "OSCommonDefine.h" #include <string> #include <vector> using namespace std; // CStringUtils類(lèi)定義 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 字符串工具類(lèi)聲明 // 當(dāng)前版本: 1.0 // 作者: Zhang Lei // 日期:2022.06.28 // 版本說(shuō)明:類(lèi)初始版本實(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語(yǔ)言調(diào)試器GDB和LLDB的使用方法
這篇文章主要介紹了C語(yǔ)言調(diào)試器GDB和LLDB的使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12一文學(xué)會(huì)數(shù)據(jù)結(jié)構(gòu)-堆
本文主要介紹了數(shù)據(jù)結(jié)構(gòu)-堆,文中通過(guò)圖片和大量的代碼講解的非常詳細(xì),需要學(xué)習(xí)的朋友可以參考下這篇文章,希望可以幫助到你2021-08-08C語(yǔ)言計(jì)算代碼執(zhí)行所耗CPU時(shí)鐘周期
本文給大家介紹的是使用C語(yǔ)言來(lái)計(jì)算代碼執(zhí)行所耗CPU時(shí)鐘周期的代碼,非常的簡(jiǎn)單實(shí)用,不過(guò)要依托于sync,有需要的小伙伴自己參考下吧。2015-03-03C語(yǔ)言中結(jié)構(gòu)體實(shí)例解析
大家好,本篇文章主要講的是C語(yǔ)言中結(jié)構(gòu)體實(shí)例解析,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-02-02C語(yǔ)言實(shí)現(xiàn)單詞小助手功能完善版
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)單詞小助手功能的完善版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
這篇文章主要介紹了C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例,并且轉(zhuǎn)換后會(huì)統(tǒng)計(jì)二進(jìn)制1的個(gè)數(shù),實(shí)例簡(jiǎn)單明了,需要的朋友可以參考下2014-06-06C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單航班管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單航班管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12