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控制臺進(jìn)行編譯(假設(shè)已經(jīng)安裝mingw并加入環(huán)境變量)
g++ -shared -Wl,--kill-at,--output-def,xxx.def -o xxx.dll xxx.cpp
(因?yàn)镃++通過修飾函數(shù)名來實(shí)現(xiàn)函數(shù)重載,所以我們要用extern "C"配合--kill-at編譯選項(xiàng)來避免對函數(shù)名的修正,BUILD_XXX_DLL宏的作用是用來選擇函數(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,類似這樣:
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ù)的對應(yīng)函數(shù)指針類型
typedef void (*pfunc)(void);
獲得指向函數(shù)的函數(shù)指針
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");
使用完畢后,要釋放dll文件
FreeLibrary(hDll);
- Nodejs libuv運(yùn)行原理詳解
- 虛函數(shù)表-C++多態(tài)的實(shí)現(xiàn)原理解析
- c++中new的三種用法詳細(xì)解析
- 淺析C++中結(jié)構(gòu)體的定義、初始化和引用
- c++ vector(向量)使用方法詳解(順序訪問vector的多種方式)
- C++二叉樹結(jié)構(gòu)的建立與基本操作
- C++ 迷宮游戲?qū)崿F(xiàn)代碼
- C++實(shí)現(xiàn)簡單的圖書管理系統(tǒng)
- 深入C++ string.find()函數(shù)的用法總結(jié)
- 淺析C/C++中sort函數(shù)的用法
- C++類靜態(tài)成員與類靜態(tài)成員函數(shù)詳解
- 詳解c++ libuv工作隊(duì)列
相關(guān)文章
C++設(shè)計(jì)模式編程中使用Bridge橋接模式的完全攻略
這篇文章主要介紹了C++設(shè)計(jì)模式編程中使用Bridge橋接模式的完全攻略,Bridge將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化需要的朋友可以參考下2016-03-03C++11運(yùn)算符重載和向量類重載實(shí)例詳解(<<,>>,+,-,*等)
這篇文章主要給大家介紹了關(guān)于C++11運(yùn)算符重載和向量類重載的相關(guān)資料,主要包括<<,>>,+,-,*等,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07Qt實(shí)現(xiàn)一個(gè)簡單的word文檔編輯器
本文主要介紹了Qt實(shí)現(xiàn)一個(gè)簡單的word文檔編輯器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C++控制臺實(shí)現(xiàn)密碼管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++控制臺實(shí)現(xiàn)密碼管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11Qt利用tablewidget模擬手指實(shí)現(xiàn)滑動(dòng)
這篇文章主要為大家詳細(xì)介紹了Qt如何利用tablewidget模擬手指實(shí)現(xiàn)滑動(dòng)效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下2023-01-01虛函數(shù)被類的構(gòu)造析構(gòu)函數(shù)和成員函數(shù)調(diào)用虛函數(shù)的執(zhí)行過程
虛函數(shù)被類的構(gòu)造析構(gòu)函數(shù)和成員函數(shù)調(diào)用虛函數(shù)的執(zhí)行過程,需要的朋友可以參考下2013-02-02