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,就成功啦?。。。?/p>

到此這篇關(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-10
QT結(jié)合百度Ai實(shí)現(xiàn)車牌識(shí)別
當(dāng)下的人工智能勢頭很盛,本文主要介紹了QT結(jié)合百度Ai實(shí)現(xiàn)車牌識(shí)別,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03

