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++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法
這篇文章主要介紹了C++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
C++實(shí)現(xiàn) vector 的四則運(yùn)算
本文給大家介紹的是在C++中實(shí)現(xiàn)高效的vector四則運(yùn)算的方法的相關(guān)資料,需要的朋友可以參考下2016-07-07
通過stringstream實(shí)現(xiàn)常用的類型轉(zhuǎn)換實(shí)例代碼
在本篇文章里小編給大家分享了關(guān)于通過stringstream實(shí)現(xiàn)常用的類型轉(zhuǎn)換實(shí)例代碼內(nèi)容,需要的朋友們可以參考下。2020-04-04
C++實(shí)現(xiàn)LeetCode(82.移除有序鏈表中的重復(fù)項(xiàng)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(82.移除有序鏈表中的重復(fù)項(xiàng)之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++實(shí)現(xiàn)“隱藏實(shí)現(xiàn),開放接口”的方案
本文從一個(gè)實(shí)例講解了C++實(shí)現(xiàn)“隱藏實(shí)現(xiàn),開放接口”的方案,文章條理清新,內(nèi)容充實(shí),需要的朋友可以參考下2015-07-07
C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言使用單鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11

