国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++生成dll和調(diào)用dll的方法實(shí)例

2020-01-26 16:21:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本人根據(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,類似這樣:
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ù)指針類型
typedef void (*pfunc)(void);

獲得指向函數(shù)的函數(shù)指針
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");

使用完畢后,要釋放dll文件
FreeLibrary(hDll);

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石河子市| 廉江市| 锡林郭勒盟| 从化市| 开鲁县| 陆良县| 龙泉市| 崇左市| 怀安县| 多伦县| 当涂县| 永川市| 清丰县| 河源市| 东台市| 岫岩| 汕尾市| 固原市| 丹寨县| 彭泽县| 吉首市| 西乡县| 藁城市| 南岸区| 彩票| 沁源县| 土默特右旗| 即墨市| 望谟县| 犍为县| 武宣县| 依安县| 梨树县| 密云县| 凤山县| 邵阳县| 富顺县| 张家界市| 来凤县| 来凤县| 怀化市|