C++生成dll和調用dll的方法實例
本人根據網絡多個相關博客帖子原創(chuàng)
1)生成dll
建立兩個文件 xxx.h , xxx.cpp
xxx.h內容如下:
#ifdef BUILD_XXX_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
extern "C"{
EXPORT void example(void);
... ...
}
xxx.cpp內容如下:
#define BUILD_XXX_DLL
#include "xxx.h"
void example(void)
{
}
... ...
然后從DOS控制臺進行編譯(假設已經安裝mingw并加入環(huán)境變量)
g++ -shared -Wl,--kill-at,--output-def,xxx.def -o xxx.dll xxx.cpp
(因為C++通過修飾函數(shù)名來實現(xiàn)函數(shù)重載,所以我們要用extern "C"配合--kill-at編譯選項來避免對函數(shù)名的修正,BUILD_XXX_DLL宏的作用是用來選擇函數(shù)原型聲明的作用)
2)靜態(tài)調用dll
在新文件yyy.cpp里加入如下內容;
#include "xxx.h"
#pragma comment(lib,"xxx.dll")
生成的dll不需要def文件和cpp文件也可以
不包含xxx.h的話,需要把h文件內的函數(shù)原型聲明添加進yyy.cpp
編譯時需要加入dll,類似這樣:
g++ -L. -o yyy.exe yyy.cpp xxx.dll
3)動態(tài)調用dll
首先,你需要包含windows.h
#include <windows.h>
你還需要一個句柄保存裝入的dll文件
HINSTANCE hDll=LoadLibrary("xxx.dll");
聲明所需函數(shù)的對應函數(shù)指針類型
typedef void (*pfunc)(void);
獲得指向函數(shù)的函數(shù)指針
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");
使用完畢后,要釋放dll文件
FreeLibrary(hDll);
相關文章
C++11運算符重載和向量類重載實例詳解(<<,>>,+,-,*等)
這篇文章主要給大家介紹了關于C++11運算符重載和向量類重載的相關資料,主要包括<<,>>,+,-,*等,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-07-07虛函數(shù)被類的構造析構函數(shù)和成員函數(shù)調用虛函數(shù)的執(zhí)行過程
虛函數(shù)被類的構造析構函數(shù)和成員函數(shù)調用虛函數(shù)的執(zhí)行過程,需要的朋友可以參考下2013-02-02