例程詳析動態連結庫 (轉)
例程詳析動態連結庫
bull77
動態連結庫(DLL,即 Dynamic-Link Library)是可的模組,但它沒有自己的堆疊,必須在動態連結庫的
環境下執行。動態連結庫不僅可以作為一個執行模組,包括函式程式碼,而且可以包含程式以外的任何資料或資源(點陣圖、圖示
等等)。動態連結庫就是給應用程式提供函式或者資源。
動態連結與靜態連結是相對立的。靜態連結的時候,可執行程式內包含了所訪問的函式的程式碼,可執行程式佔用的空間較
大;但執行時,不需要其他模組支援,從而速度相對較快。動態連結的可執行程式中不包含動態訪問的函式程式碼,僅僅包含對
它的參考,執行時需要其他模組(DLL)的支援,速度相對較慢。
動態連結庫是的一種極其重要的技術。它使得開發人員可以透過編寫動態連結庫,方便靈活的實現大型程式的開
發,按自己的意願對操作進行擴充套件。
下面透過例子介紹如何在動態連結庫中定義函式、資源、和類以及如何在工程中使用動態連結庫中已定義的函式、資源、
類。
一、 函式的定義和使用方法:
第一步:
執行AppWizard,定義專案名為mydll,選擇MFC AppWizard(dll),而不是MFC AppWizards(exe)。
第二步:
在這個例子中,只有一個AppWizard螢幕出現,選擇MFC擴充套件DLL(MFC Extension DLL (using shared MFC DLL),點選
FINISH生成工程。
第三步:
點選File中的New,選擇C/C++ Header File,File Name中輸入dll,點選OK,建立dll.h。輸入extern "C" __declspec(dllexport)
int fun(int x1,int x2,int x3); ,儲存。
第四步:
點選File中的New,選擇C++ File,File Name中輸入dll,點選OK,建立dll.cpp。輸入
#include "stdafx.h"
#include "dll.h"
extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3)
{
return x1+x2+x3;
}
編譯生成mydll.dll和mydll.lib。
第五步:
選擇Project 中Add To Project 中的New , 重新生成一個工程,選擇MFC AppWizards(exe),專案名為mydlltest , 選擇Single
Document ,點選FINISH,生成一個新的工程。選擇選單中的Project àSet Active Project àmydlltest ,將mydlltest設為當前活動工程
。
第六步:
複製…mydlldemydll.dll 到 ..mydlltestdebug下,複製…mydlldebugmydll.lib到…mydlltest目錄下。
第七步:
在mydlltestView.cpp中的#endif下新增
extern "C" __declspec(dllimport) int fun(int x1,int x2,int x3);
在void CMydlltestView::OnDraw(CDC* pDC)中新增程式碼如下:
void CMydlltestView::OnDraw(CDC* pDC)
{
CMydlltestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int x=fun(1,2,3);
CString str;
str.Format("%d",str);
pDC->TextOut(10,10,x);
}
第八步:
在WorkSpace中的mydlltest files上點選右鍵,選擇Add files to Project ,將mydll.dll新增到工程。
好了,我們的工作做完了,執行一下看看吧!
二、 類的新增和使用步驟:
在mydll中生成一個新類,類的宣告處改為class AFX_EXT_CLASS CMyClass ,在此類中和其他類一樣新增自己需要的變數
和函式,編譯生成新的dll和lib,重複上面的第六步,在mydlltest中利用上面的方法生成一個myclass.h,複製mydll中
myclass.h的所有程式碼到新生成的myclass.h中。在需要使用dll中CmyClass類的檔案中包含myclass.h,然後我們就可以向其他類
一樣使用該類了。
三、 字串的定義和使用
在mydll中定義字串資源,編譯生成新的dll和lib,重複上面的第六步,在mydlltest中的myclass.h中新增 #define IDS_MYSTR
1(假設我們定義的字串資源的ID號為IDS_MYSTR),在需要是要該字串的地方新增#include "myclass.h",即可使用該字
符串了。
CString str2;
str2.LoadString(IDS_MYSTR);
四、 對話方塊的定義和使用
在mydll中定義對話方塊資源,生成一個新類CDlg,類的宣告處改為class AFX_EXT_CLASS CDlg : public CDialog ,像其他對
話框一樣定義對話方塊的屬性和功能,編譯生成新的dll和lib,重複上面的第六步,在mydlltest中利用上面的方法生成一個dlg.h檔案
,複製mydll中dlg.h的所有程式碼到新生成的dlg.h中。在需要使用dll中此對話方塊資源的檔案中包含dlg.h,然後我們就可以向其他
對話方塊一樣使用此對話方塊了。
CDlg dlg;
dlg.odal();
好了,到這裡我們所有的功能就都實現了,快編譯執行一下吧!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-998615/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 動態連結庫(轉)
- 動態連結庫與靜態連結庫
- 類,介面與動態連結庫 (轉)
- cmake 連結動態連結庫
- 動態連結庫和靜態連結庫的區別
- 動態連結庫(DLL)
- LINUX動態連結庫高階應用(轉)Linux
- Win32動態連結庫與靜態連結庫的區別Win32
- 我的Dll(動態連結庫)學習筆記 (轉)筆記
- VB呼叫C程式的方法—動態連結庫法 (轉)C程式
- linux下靜態連結庫和動態連結庫的區別有哪些Linux
- linux下生成動態連結庫Linux
- 深入理解C語言----動態庫 & 靜態庫 & 連結C語言
- 【連結 1】與靜態連結庫連結
- JAVA動態繫結淺析Java
- LINUX系統中動態連結庫的建立與使用(轉)Linux
- 我的Dll(動態連結庫)學習筆記 rivershan(原作) (轉)筆記
- 載入動態連結庫——dlopen dlsym dlclose
- C#呼叫C++動態連結庫C#C++
- 完成Excel動態連結外部資料庫Excel資料庫
- 動態連結庫(DLL)的建立和使用
- 動態連結庫DLL_第1篇
- 動態連結庫的生成和使用(二)
- 如何連結兩個名字一樣動態庫
- Linux下的靜態連結與動態連結Linux
- Win32環境下動態連結庫(DLL)程式設計原理 (轉)Win32程式設計
- Android NDK祕籍--淺析靜態庫和動態庫Android
- 靜態連結動態連結的連結順序問題和makefile示例
- 在 Linux中如何使用動態連結模組庫?Linux
- P/Invoke之C#呼叫動態連結庫DLLC#
- golang可以呼叫C++的動態連結庫麼GolangC++
- 【PB】powerbuilder呼叫VC編寫的動態連結庫UI
- 處理動態連結庫報錯的問題
- 使用js動態新增連結隨機連結JS隨機
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- Linux共享庫、靜態庫、動態庫詳解Linux
- IIS無法訪問動態連結庫DLL的原因
- Windows下的VC++動態連結庫程式設計WindowsC++程式設計