C++封裝成DLL并調(diào)用的實(shí)現(xiàn)
使用vs2019將C++封裝成DLL并調(diào)用主要有以下幾個(gè)步驟:
1)新建工程,編寫要封裝的.cpp和.h文件;
2) 生成動(dòng)態(tài)鏈接庫.dll和靜態(tài)鏈接庫.lib;
3) 調(diào)用通過.h文件調(diào)用;
第一步:編寫.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) //導(dǎo)出 //動(dòng)態(tài)鏈接庫 class FENGZHUANGCPP_API IInterface { public: static IInterface* CreateInterface(); virtual void Init() = 0; virtual void Destroy() = 0; virtual char *GetName() = 0; }; #endif //PCH_H
第二步:生成動(dòng)態(tài)鏈接庫.dll和靜態(tài)鏈接庫.lib
①右鍵解決方案資源管理器的工程名稱>>屬性>>屬性配置>>常規(guī)>>配置類型,將配置類型選為動(dòng)態(tài)庫(.dll),點(diǎn)擊確定
②右鍵解決方案資源管理器的工程名稱,選擇生成
③右鍵解決方案資源管理器的工程名稱>>屬性>>屬性配置>>常規(guī)>>配置類型,將配置類型選為靜態(tài)庫(.lib),點(diǎn)擊確定
④右鍵解決方案資源管理器的工程名稱,選擇生成
此時(shí),會(huì)在工程路徑下的x64\Debug文件夾中看到你所生成的.dll和.lib文件(比如我的在:E:\C++\RunLIB\x64\Debug路徑中)
到這里,我們已經(jīng)完成了封裝的過程,那么我們應(yīng)該如何調(diào)用我們的接口呢?
第三步:調(diào)用通過.h文件調(diào)用;
①將生成的.dll和.lib,以及pch.cpp放在一個(gè)名為dllib的文件夾中(為了后面調(diào)用)
②使用vs新建一個(gè)名為diaoyong的工程(同時(shí)會(huì)自動(dòng)生成一個(gè)diaoyong.cpp),將①的文件夾復(fù)制到工程目錄下
③在diaoyong.cpp輸入調(diào)用的代碼
#include "dlllib/pch.h" #include <iostream> using namespace std; #pragma comment(lib,"dLLL.lib") //動(dòng)態(tài)庫在運(yùn)行時(shí),會(huì)把代碼鏈接到目標(biāo) //靜態(tài)庫在編譯期,會(huì)把代碼鏈接到目標(biāo) int main() { IInterface* IF = IInterface::CreateInterface(); cout << IF->GetName() << endl; IF->Init(); IF->Destroy(); return 0; }
此時(shí),運(yùn)行會(huì)出現(xiàn)如下報(bào)錯(cuò),是因?yàn)槲覀儧]有把包含.lib的文件夾路徑加載進(jìn)來,我們需要執(zhí)行的操作:
1)右鍵解決方案資源管理器的工程名稱>>屬性>>配置屬性>>C/C++>>附加包含目錄>>編輯>>.lib文件的路徑放進(jìn)去
2)右鍵解決方案資源管理器的工程名稱>>屬性>>項(xiàng)目屬性>>配置屬性>>鏈接器>>附加庫目錄>>編輯>>.lib文件的路徑放進(jìn)去
加載完成后,在運(yùn)行我們編寫的diaoyong.cpp,就成功啦?。。?!
到此這篇關(guān)于C++封裝成DLL并調(diào)用的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C++封裝成DLL并調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)代碼
這篇文章主要介紹了C++發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-06-06探索Visual C++下創(chuàng)建WPF項(xiàng)目的方法示例
這篇文章主要介紹了探索Visual C++下創(chuàng)建WPF項(xiàng)目的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10QT結(jié)合百度Ai實(shí)現(xiàn)車牌識(shí)別
當(dāng)下的人工智能勢(shì)頭很盛,本文主要介紹了QT結(jié)合百度Ai實(shí)現(xiàn)車牌識(shí)別,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03