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

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

例程詳析動(dòng)態(tài)鏈接庫

2019-11-17 05:34:19
字體:
供稿:網(wǎng)友

  動(dòng)態(tài)鏈接庫(DLL,即 Dynamic-Link Library)是可執(zhí)行的模塊,但它沒有自己的堆棧,必須在調(diào)用動(dòng)態(tài)鏈接庫函數(shù)的程序環(huán)境下運(yùn)行。動(dòng)態(tài)鏈接庫不僅可以作為一個(gè)運(yùn)行模塊,包括函數(shù)代碼,而且可以包含程序以外的任何數(shù)據(jù)或資源(位圖、圖標(biāo)等等)。動(dòng)態(tài)鏈接庫就是給應(yīng)用程序提供函數(shù)或者資源。

  動(dòng)態(tài)鏈接與靜態(tài)鏈接是相對(duì)立的。靜態(tài)鏈接的時(shí)候,可執(zhí)行程序內(nèi)包含了所訪問的函數(shù)的代碼,可執(zhí)行程序占用的空間較大;但運(yùn)行時(shí),不需要其他模塊支持,從而速度相對(duì)較快。動(dòng)態(tài)鏈接的可執(zhí)行程序中不包含動(dòng)態(tài)訪問的函數(shù)代碼,僅僅包含對(duì)它的參考,運(yùn)行時(shí)需要其他模塊(DLL)的支持,速度相對(duì)較慢。

  動(dòng)態(tài)鏈接庫是Windows的一種極其重要的技術(shù)。它使得開發(fā)人員可以通過編寫動(dòng)態(tài)鏈接庫,方便靈活的實(shí)現(xiàn)大型程序的開發(fā),按自己的意愿對(duì)操作系統(tǒng)進(jìn)行擴(kuò)展。

  下面通過例子介紹如何在動(dòng)態(tài)鏈接庫中定義函數(shù)、資源、和類以及如何在工程中使用動(dòng)態(tài)鏈接庫中已定義的函數(shù)、資源、類。

  一、 函數(shù)的定義和使用方法:

  第一步:

   運(yùn)行AppWizard,定義項(xiàng)目名為mydll,選擇MFC AppWizard(dll),而不是MFC AppWizards(exe)。

  第二步:

   在這個(gè)例子中,只有一個(gè)AppWizard屏幕出現(xiàn),選擇MFC擴(kuò)展DLL(MFC Extension DLL (using shared MFC DLL),點(diǎn)擊FINISH生成工程。

  第三步:

   點(diǎn)擊File中的New,選擇C/C++ Header File,F(xiàn)ile Name中輸入dll,點(diǎn)擊OK,創(chuàng)建dll.h。輸入extern "C" __declspec(dlleXPort) int fun(int x1,int x2,int x3); ,保存。

  第四步:

   點(diǎn)擊File中的New,選擇C++ Source File,F(xiàn)ile Name中輸入dll,點(diǎn)擊OK,創(chuàng)建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 , 重新生成一個(gè)工程,選擇MFC AppWizards(exe),項(xiàng)目名為mydlltest , 選擇Single Document ,點(diǎn)擊FINISH,生成一個(gè)新的工程。選擇菜單中的Project àSet Active Project àmydlltest ,將mydlltest設(shè)為當(dāng)前活動(dòng)工程。

  第六步:

  拷貝…/mydll/debug/mydll.dll 到 ../mydlltest/debug/下,拷貝…/mydll/debug/mydll.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上點(diǎn)擊右鍵,選擇Add files to Project ,將mydll.dll添加到工程。
好了,我們的工作做完了,運(yùn)行一下看看吧!

  二、 類的添加和使用步驟:

  在mydll中生成一個(gè)新類,類的聲明處改為class AFX_EXT_CLASS CMyClass ,在此類中和其他類一樣添加自己需要的變量和函數(shù),編譯生成新的dll和lib,重復(fù)上面的第六步,在mydlltest中利用上面的方法生成一個(gè)myclass.h文件,拷貝mydll中myclass.h的所有代碼到新生成的myclass.h中。在需要使用dll中CmyClass類的文件中包含myclass.h,然后我們就可以向其他類一樣使用該類了。

  三、 字符串的定義和使用

  在mydll中定義字符串資源,編譯生成新的dll和lib,重復(fù)上面的第六步,在mydlltest中的myclass.h中添加 #define IDS_MYSTR 1(假設(shè)我們定義的字符串資源的ID號(hào)為IDS_MYSTR),在需要是要該字符串的地方添加#include "myclass.h",即可使用該字符串了。

  CString str2;
  str2.LoadString(IDS_MYSTR);

  四、 對(duì)話框的定義和使用

  在mydll中定義對(duì)話框資源,生成一個(gè)新類CDlg,類的聲明處改為class AFX_EXT_CLASS CDlg : public CDialog ,像其他對(duì)話框一樣定義對(duì)話框的屬性和功能,編譯生成新的dll和lib,重復(fù)上面的第六步,在mydlltest中利用上面的方法生成一個(gè)dlg.h文件,拷貝mydll中dlg.h的所有代碼到新生成的dlg.h中。在需要使用dll中此對(duì)話框資源的文件中包含dlg.h,然后我們就可以向其他對(duì)話框一樣使用此對(duì)話框了。

  CDlg dlg;
  dlg.DoModal();

  好了,到這里我們所有的功能就都實(shí)現(xiàn)了,快編譯運(yùn)行一下吧!怎么樣?還滿足嗎?


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 枣庄市| 卢湾区| 秀山| 武川县| 韶山市| 永安市| 库伦旗| 通州区| 佛学| 晋宁县| 长武县| 贵州省| 湖北省| 澎湖县| 宁陵县| 谷城县| 唐海县| 威海市| 府谷县| 霍城县| 吉林市| 青州市| 沁阳市| 天门市| 武鸣县| 通江县| 西昌市| 成武县| 博兴县| 固镇县| 阿合奇县| 清镇市| 徐州市| 镇安县| 鹿邑县| 波密县| 岚皋县| 永安市| 清水县| 深圳市| 凤台县|