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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

動(dòng)態(tài)鏈接庫的創(chuàng)建和使用(基礎(chǔ)版)——學(xué)習(xí)記錄

2019-11-14 09:54:42
字體:
供稿:網(wǎng)友

dll是將一個(gè)項(xiàng)目模塊化的非常重要的組成部分,因此將dll的學(xué)習(xí)過程和工作中的經(jīng)驗(yàn)記錄下來以便更好地梳理知識。

編譯環(huán)境:Visual C++ 6.0

一、創(chuàng)建動(dòng)態(tài)鏈接庫

1、創(chuàng)建dll工程(dll工程又分為MFC Dll、Win 32 Dll,還可以自己創(chuàng)建單個(gè).cpp文件)

2、在源文件*.cpp中編寫函數(shù)(每個(gè)函數(shù)結(jié)尾不需要‘;’),并且在需要導(dǎo)出的函數(shù)前加 _declspec(dllexport),可參考下面代碼:(我用了一個(gè)宏DLL_API 來定義_declspec(dllexport),也可以用_declspec(dllexport)直接加在導(dǎo)出函數(shù)的前面)

#ifdef DLL_API extern "C"_declspec(dllexport)   #else  #define DLL_API extern "C" _declspec(dllexport) #endif   DLL_API int __stdcall addtest(int a,int b){return a+b;} 

3、在頭文件*.h中聲明導(dǎo)出函數(shù),將DLL1_API定義為export,供輸出使用

#ifdef DLL_API extern "C" _declspec(dllexport)   #else  #define DLL_API extern "C" _declspec(dllexport)  #endif 

DLL_API int addtest(int a,int b){return a+b;}  

4、build生成dll,lib文件

    到這里,已經(jīng)完成了最基礎(chǔ)的的函數(shù)的導(dǎo)出部分,還有導(dǎo)出類,這里沒寫出來,后續(xù)再加上。

    還有一點(diǎn)需要注意的是,在創(chuàng)建動(dòng)態(tài)鏈接庫的時(shí),有時(shí)會(huì)出現(xiàn)導(dǎo)出函數(shù)名字改編的問題,可以用模塊定義文件*.def來消除問題,用法如下。也可以搜索關(guān)鍵字“dll名字改編”等關(guān)鍵去查找相關(guān)資料。

EXPORTSaddtest

二、調(diào)用動(dòng)態(tài)鏈接庫

靜態(tài)調(diào)用1、把.lib、.dll、和.h頭文件拷貝到工程目錄下2、添加h文件:(*.h) 

#PRagma comment(lib,”mfcdlltest.lib”)//告訴編譯器DLL相對應(yīng)的lib文件所在路徑和文件名 

extern “C”_declspec(dllimport) int _stdcall addtest(int a,int b);//聲明導(dǎo)入函數(shù) 

3、在工程中使用函數(shù)addtest

動(dòng)態(tài)調(diào)用1、只需把.dll拷貝到運(yùn)行目錄下(注意是運(yùn)行目錄,如果單步調(diào)試時(shí)需拷貝在工程目錄;運(yùn)行exe需要放在exe同級目錄下,路徑可以自行設(shè)定)2、加載并調(diào)用導(dǎo)出函數(shù),使用完之后釋放typedef int (* lpAddFun)(int ,int);//定義一個(gè)與Add_new函數(shù)接受參數(shù)類型和返回值均相同的函數(shù)指針類型 …………HINSTANCE hDll;//句柄lpAddFun addFun;//函數(shù)指針 hDll = LoadLibrary("mfcdlltest.dll");//動(dòng)態(tài)加載DLL模塊句柄 if( hDll ){addFun=(lpAddFun) GetProcAddress(hDll,"addtest");//得到所加載DLL模塊中函數(shù)的地址 if( addFun ){addFun(1,2);FreeLibrary(hDll);//釋放已經(jīng)加載的DLL模塊}}    顯然,使用動(dòng)態(tài)鏈接庫是比較簡單的。怎么寫好動(dòng)態(tài)鏈接庫顯得更為重要,看導(dǎo)出的函數(shù)能否成功被調(diào)用以及函數(shù)本身的功能是否實(shí)現(xiàn)的這個(gè)過程需要不斷調(diào)試。我在學(xué)習(xí)的時(shí)候也借鑒了一些前輩的總結(jié)的經(jīng)驗(yàn),大家還有不懂的也可以借鑒一下:http://blog.csdn.net/jarvischu/article/details/6559059


上一篇:

下一篇:LEETCODE--Sum of Left Leaves

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新绛县| 尤溪县| 苏尼特右旗| 宁都县| 大理市| 衡南县| 安西县| 黄平县| 宜都市| 清河县| 双峰县| 高陵县| 翼城县| 依兰县| 大城县| 阿拉善右旗| 温州市| 全南县| 吉林市| 绥中县| 定安县| 鞍山市| 怀安县| 积石山| 鄂温| 岢岚县| 略阳县| 郧西县| 利辛县| 涟源市| 黔西| 建宁县| 牡丹江市| 舞钢市| 马龙县| 绥化市| 道孚县| 通辽市| 海阳市| 高州市| 宁陵县|