C++生成dll和調(diào)用dll的方法實(shí)例
本人根據(jù)網(wǎng)絡(luò)多個(gè)相關(guān)博客帖子原創(chuàng)
1)生成dll
建立兩個(gè)文件 xxx.h , xxx.cpp
xxx.h內(nèi)容如下:
#ifdef BUILD_XXX_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
extern "C"{
EXPORT void example(void);
... ...
}
xxx.cpp內(nèi)容如下:
#define BUILD_XXX_DLL
#include "xxx.h"
void example(void)
{
}
... ...
然后從DOS控制臺(tái)進(jìn)行編譯(假設(shè)已經(jīng)安裝mingw并加入環(huán)境變量)
g++ -shared -Wl,--kill-at,--output-def,xxx.def -o xxx.dll xxx.cpp
(因?yàn)镃++通過(guò)修飾函數(shù)名來(lái)實(shí)現(xiàn)函數(shù)重載,所以我們要用extern "C"配合--kill-at編譯選項(xiàng)來(lái)避免對(duì)函數(shù)名的修正,BUILD_XXX_DLL宏的作用是用來(lái)選擇函數(shù)原型聲明的作用)
2)靜態(tài)調(diào)用dll
在新文件yyy.cpp里加入如下內(nèi)容;
#include "xxx.h"
#pragma comment(lib,"xxx.dll")
生成的dll不需要def文件和cpp文件也可以
不包含xxx.h的話,需要把h文件內(nèi)的函數(shù)原型聲明添加進(jìn)yyy.cpp
編譯時(shí)需要加入dll,類(lèi)似這樣:
g++ -L. -o yyy.exe yyy.cpp xxx.dll
3)動(dòng)態(tài)調(diào)用dll
首先,你需要包含windows.h
#include <windows.h>
你還需要一個(gè)句柄保存裝入的dll文件
HINSTANCE hDll=LoadLibrary("xxx.dll");
聲明所需函數(shù)的對(duì)應(yīng)函數(shù)指針類(lèi)型
typedef void (*pfunc)(void);
獲得指向函數(shù)的函數(shù)指針
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");
使用完畢后,要釋放dll文件
FreeLibrary(hDll);
相關(guān)文章
利用C++編寫(xiě)簡(jiǎn)易寶可夢(mèng)對(duì)戰(zhàn)小游戲
本文利用C++語(yǔ)言編寫(xiě)了一個(gè)小時(shí)候課間嘴上玩的那種寶可夢(mèng)游戲,只有早期的三個(gè)寶可夢(mèng)和基礎(chǔ)招式,感興趣的朋友快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
提高C++程序運(yùn)行效率的10個(gè)簡(jiǎn)單方法
這篇文章主要介紹了提高C++程序運(yùn)行效率的10個(gè)簡(jiǎn)單方法,包括了循環(huán)、變量、繼承等等應(yīng)用的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09
深入解析C++編程中基類(lèi)與基類(lèi)的繼承的相關(guān)知識(shí)
這篇文章主要介紹了C++編程中基類(lèi)與基類(lèi)的繼承的相關(guān)知識(shí),包括多個(gè)基類(lèi)繼承與虛擬基類(lèi)等重要知識(shí),需要的朋友可以參考下2016-01-01
記逆向小白的第一次vbsedit 9爆破及內(nèi)存補(bǔ)丁制作過(guò)程
這篇文章主要介紹了記逆向小白的第一次vbsedit 9爆破及內(nèi)存補(bǔ)丁制作過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
詳細(xì)分析Android中實(shí)現(xiàn)Zygote的源碼
這篇文章主要介紹了詳細(xì)分析Android中實(shí)現(xiàn)Zygote的源碼,包括底層的C/C++代碼以及Java代碼部分入口,需要的朋友可以參考下2015-07-07
C語(yǔ)言實(shí)現(xiàn)像素鳥(niǎo)游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)像素鳥(niǎo)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
OpenCV霍夫變換(Hough Transform)直線檢測(cè)詳解
這篇文章主要為大家詳細(xì)介紹了OpenCV霍夫變換直線檢測(cè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12

