當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]? 動態(tài)鏈接庫:DLL(Dynamic Linkable Library) ? ? kernel32.dll處理內(nèi)存管理和進程調(diào)度 user32.dll控制用戶界面 gdi32.dll圖形處理 ? w

?

動態(tài)鏈接庫:DLL(Dynamic Linkable Library)

?

?

kernel32.dll處理內(nèi)存管理和進程調(diào)度

user32.dll控制用戶界面

gdi32.dll圖形處理

?

win32 dll

mfc dll

#include

#include

using namespace std;

typedef int(*LoadFunc)(int,int);

?

int main(void)

{

?

?????? HINSTANCE hInstance;

?????? LoadFunc add;

//加載dll

?

?????? hInstance=LoadLibrary(L"C:\Documents and Settings\liutao6\桌面\dlld.dll");

?????? if (hInstance!=NULL)

?????? {????

?????? add=(LoadFunc)GetProcAddress(hInstance,"Add");//獲取函數(shù)地址

?????? if (add!=NULL)

?????? {

????????????? int result=add(5,2);

????????????? cout<

?????? }

?

?????? FreeLibrary(hInstance);//釋放dll模塊

?????? }

?

}

?

?

?

extern "C" int __declspec(dllexport) Add(int,int);? //導(dǎo)出函數(shù)

?

int Add(int a,int b)

{

?????? return a+b;

}

使用MFC編寫的DLL,可以分成兩大類:

l 規(guī)則DLL——規(guī)則(regular)DLL中所包含的函數(shù),可以被所有Windows應(yīng)用程序使用;

n???????? 共享MFC——DLL中不包含MFC庫函數(shù),需要另外安裝MFC動態(tài)鏈接庫后才能使用;

n???????? 靜態(tài)MFC——DLL中包含MFC庫函數(shù),可以脫離MFC動態(tài)鏈接庫獨立使用。

l 擴展DLL——擴展(extension)DLL中所定義的類和函數(shù),只能被所MFC應(yīng)用程序使用。而且擴展DLL中不能包含MFC庫函數(shù),也需要另外安裝MFC動態(tài)鏈接庫后才能使用。

?

1 擴展DLL

使用MFC編寫的擴展DLL,可以導(dǎo)出整個類(從而能使用類中的所有成員,包括數(shù)據(jù)成員和成員函數(shù)),也可以導(dǎo)出指定的若干(成員或全局)函數(shù)。

(1)新建MFC擴展DLL

(2)添加導(dǎo)出類(MFC類).繼承自Cobject.編寫代碼并運行

AFX_EXT_CLASS intMod(intd1, int d2);//導(dǎo)出函數(shù)聲明

class? AFX_EXT_CLASS CCompute : public CObject//導(dǎo)出類聲明

?????? //#define AFX_EXT_CLASS?????? AFX_CLASS_EXPORT

?????? //#define AFX_CLASS_EXPORT __declspec(dllexport)

{

public:

??? int m_data1, m_data2;

??? CCompute();

??? CCompute(intd1,int d2);

??? virtual ~CCompute();

public:

??? int Add();

??? int Sub();

??? int Mul();

??? double Div();

?

};

(3)新建項目MFC應(yīng)用程序。選中項目名,選中菜單項“項目項目依賴項”,在彈出的“項目依賴項”對話框中,選中“依賴欄”中的

(4)新項目的頭文件包含頭文件#include "..ExtDllCompute.h"

(5)在項目的類中聲明對象CCompute *m_pComp;

void CExtClientDlg::OnBnClickedAdd()

{

?????? // TODO: 在此添加控件通知處理程序代碼

??????Comp(IDC_ADD);

}

?

void CExtClientDlg::Comp(UINT nID)//參數(shù)為按鈕標(biāo)識

{

?????? UpdateData(); //動態(tài)獲取用戶輸入的數(shù)據(jù)并賦值給對應(yīng)的控件變量

?????? m_pComp = new CCompute(m_iData1, m_iData2); //創(chuàng)建計算對象

?????? int r;

?????? double dr;

?????? switch(nID) { //進行四則和取模運算

????????????? case IDC_ADD: r = m_pComp->Add(); break;

。。。

?????? }

?????? delete m_pComp;

?????? if (nID != IDC_DIV) SetDlgItemInt(IDC_RESULT, r); //顯示整數(shù)結(jié)果

?????? else { // 顯示除法所得的實數(shù)結(jié)果

????????????? wchar_t buf[20];

????????????? swprintf_s(buf, 20, L"%g", dr);

????????????? SetDlgItemText(IDC_RESULT, buf);

?????? }

}

2? 規(guī)則DLL

使用MFC編寫的規(guī)則DLL,雖然只能導(dǎo)出函數(shù)而不能導(dǎo)出整個類,但是其導(dǎo)出的函數(shù)卻可以其他被非MFC應(yīng)用程序所調(diào)用。下面我們?nèi)酝ㄟ^上面的四則運算的例子,看看如何用關(guān)鍵字__declspec(dllexport)和extern "C"來編寫和使用導(dǎo)出若干(全局)C函數(shù)的規(guī)則MFC DLL。

使用共享MFC DLL的規(guī)則DLL

也可以選擇“帶靜態(tài)鏈接MFC的規(guī)則DLL”,差別是所生成的DLL中會包含MFC庫,當(dāng)然所生成的庫文件也會大一些(但因此可不用另外安裝MFC動態(tài)鏈接庫)。例如,在此例中,選共享MFC所生成的RegDll.dll文件只有13KB大,而選擇靜態(tài)MFC的則有199KB。

規(guī)則DLL項目是使用共享MFC還是使用靜態(tài)MFC,也可以在生成DLL項目之后,通過項目屬性對話框的“配置屬性常規(guī)”頁中的“MFC的使用”欄中的下拉式列表選項來切換,這一點與普通MFC應(yīng)用程序項目的類似。

?

1.宏定義

#define DllImport extern "C" _declspec(dllimport)

2.Cpp文件中加入

DllExport int Add(intd1,int d2) {??? return d1 + d2;}

DllExport int Sub(intd1,int d2) {??? return d1 - d2;}

DllExport int Mul(intd1,int d2) {??? return d1 * d2;}

?

?

?

3.添加依賴項和頭文件方法同上。工程文件cpp中加入

#define DllImport extern "C" _declspec(dllimport)

?

DllImport int Add(intd1,int d2);

DllImport int Sub(intd1,int d2);

DllImport int Mul(intd1,int d2);

DllImport double Div(intd1,int d2);

DllImport intMod(intd1, int d2);

?

4.使用函數(shù)

Add(m_iData1,m_iData2)

?

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉