亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap9_3.htm

?? VC++編程實例。非常詳細
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
<html>

<head>
<title>9.3創建動態連接庫</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<link rel="stylesheet" href="../../../cpcw.css"></head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
    <table width="85%" border="0">
      <tr bgcolor="#FFFFFF"> 
        <td> 
          <div align="center">
            <center>
            </center>
          </div>
          <p align="CENTER"><b><font color="red">9.3創建動態連接庫</font></b></p>
          <p> 在一些情況下,必須使用動態連接庫:</p>
          <p> 1.多個應用程序共享代碼和數據:比如Office軟件的各個組成部分有相似的外觀和功能,這就是通過共享動態連接庫實現的。</p>
          <p> 2.在鉤子程序過濾系統消息時必須使用動態連接庫</p>
          <p> 3.設備驅動程序必須是動態連接庫</p>
          <p> 4.如果要在對話框編輯器中使用自己定義的控件,也必須使用動態連接庫</p>
          <p> 5.動態連接庫以一種自然的方式將一個大的應用程序劃分為幾個小的模塊,有利于小組內部成員的分工與合作。而且,各個模塊可以獨立升級。如果小組中的一個成員開發了一組實用例程,他就可以把這些例程放在一個動態連接庫中,讓小組的其他成員使用。</p>
          <p> 6.為了實現應用程序的國際化,往往需要使用動態連接庫。使用動態連接庫可以將針對某一國家、語言的信息存放在其中。對于不同的版本,使用不同的動態連接庫。在使用AppWizard生成應用程序時,我們可以指定資源文件使用的語言,這就是通過提供不同的動態連接庫實現的。</p>
          <p> MFC支持兩類動態連接庫的創建:</p>
          <p> 用戶動態連接庫</p>
          <p> MFC擴展類庫。</p>
          <p> <b></b>9.3.1用戶動態連接庫(_USRDLL)</p>
          <p> </p>
          <p> 用戶動態連接庫一般使用C語言接口。要創建一個動態連接庫,選擇File-&gt;New菜單,彈出New對話框。在Projects標簽頁下,選擇“Win32 
            Dynamic-Link Library”。Visual 
            C++就會創建動態連接庫所需的工程文件和MAK文件。</p>
          <p> 然后把下面兩個文件加入到工程中(Project-Add 
            to Project-Files菜單)。</p>
          <p> 文件1:mymaths.cpp</p>
           
          <p>////////////////////////////</p>
          <p>//mymaths.cpp</p>
          <p>//</p>
          <p>//a maths API DLL.</p>
          <p>//</p>
          <p>///////////////////////////</p>
          <p>#include&lt;windows.h&gt;</p>
          <p>//Declare the DLL functions prototypes</p>
          <p>int Summary(int);</p>
          <p>int Factorial(int);</p>
          <p>//////////////////////////</p>
          <p>//DllEntryPoint():The entry point of the DLL</p>
          <p>//</p>
          <p>/////////////////////////</p>
          <p>BOOL WINAPI DLLEntryPoint(HINSTANCE hDLL,DWORD dwReason,</p>
          <p>LPVOID Reserved)</p>
          <p>{</p>
          <p>switch(dwReason)</p>
          <p>{</p>
          <p>case DLL_PROCESS_ATTACH:</p>
          <p>{</p>
          
          <p>//一些初始化代碼</p>
           
          <p>break;</p>
          <p>}</p>
          <p>case DLL_PROCESS_DETACH:</p>
          <p>{</p>
          
          <p>//一些用于清理的代碼</p>
           
          <p>break;</p>
          <p>}</p>
          <p>}</p>
          <p>return TRUE;</p>
          <p>}</p>
          <p>int Summary(int n)</p>
          <p>{</p>
          <p>int sum=0;</p>
          <p>int i;</p>
          <p>for(i=1;i&lt;=n;i++)</p>
          <p>{</p>
          <p>sum+=i;</p>
          <p>}</p>
          <p>return sum;</p>
          <p>}</p>
          <p>int Factorial(int n)</p>
          <p>{</p>
          <p>int Fact=1;</p>
          <p>int i;</p>
          <p>for(i=1;i&lt;=n;i++)</p>
          <p>{</p>
          <p>Fact=Fact*i;</p>
          <p>}</p>
          <p>return Fact;</p>
          
          <p>}</p>
          <p> 文件2:mymaths.def</p>
           
          <p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
          <p>;Mymaths.DEF</p>
          <p>;</p>
          <p>;The DEF file for the Mymaths.DLL DLL.</p>
          <p>;</p>
          <p>LIBRARY mymaths</p>
          <p>CODE PRELOAD MOVEABLE DISCARDABLE</p>
          <p>DATA PRELOAD SINGLE</p>
          <p>EXPORTS</p>
          <p>;The names of the DLL functions</p>
          <p>Summary</p>
          <p>Factorial</p>
          
          <p>在文件mymaths.cpp開頭,聲明了動態連接庫所包含的兩個函數:Summary和Factorial。接著是DllEntryPoint()函數的定義。DllEntryPoint()顧名思義是動態連接庫的入口,應用程序通過該入口訪問動態連接庫提供的服務。DllEntryPoint()主體是一個switch/case語句:</p>
           
          <p>switch(dwReason)</p>
          <p>{</p>
          <p>case DLL_PROCESS_ATTACH:</p>
          <p>{</p>
          
          <p>//一些初始化代碼</p>
           
          <p>break;</p>
          <p>}</p>
          <p>case DLL_PROCESS_DETACH:</p>
          <p>{</p>
          
          <p>//一些用于清理的代碼</p>
           
          <p>break;</p>
          <p>}</p>
          <p>}</p>
          
          <p>其中,在case 
            DLL_PROCESS_ATTACH分支可加入動態連接庫執行時的一些初始化代碼。在case 
            DLL_PROCESS_DETACH加入動態連接庫被卸載時的一些清理代碼,比如釋放動態連接庫運行時申請的內存等。</p>
          <p> 在DllEntryPoint()函數后,是兩個函數Summary和Factorial函數的定義。它們的定義與前面的靜態庫完全相同。在這里用戶可以放入任何函數。</p>
          <p> 另外,我們還需要一個mymaths.def文件。這個文件記錄了可被外部應用程序使用的DLL庫函數名字。這些名字信息和對應的函數位置的信息將被編譯進動態連接庫文件中,然后應用程序根據函數名字和函數位置對照表來找到對應的函數。</p>
          <p> 按F7編譯工程,Visual 
            C++就在mymaths\debug目錄下生成一個mymaths.dll動態連接庫文件。</p>
          <p> 現在,我們來使用剛才生成的動態連接庫。我們并不重新生成一個程序,而是修改前面測試靜態庫時的test程序。首先,把mymaths\debug目錄下的mymaths.dll拷貝到test\debug目錄下。test程序運行時,會在該目錄下搜索動態連接庫文件。然后修改testdlg.h,在其中加入一個函數LoadDLL()的聲明,見清單9.4。LoadDLL用于載入動態連接庫。</p>
          
          <p> <b>清單</b><b>9.4 
            修改后的對話框頭文件</b></p>
           
          <p>class CTestDlg : public CDialog</p>
          <p>{</p>
          <p>// Construction</p>
          <p>public:</p>
          <p>CTestDlg(CWnd* pParent = NULL); // standard constructor</p>
          <p>protected:</p>
          <p>void LoadDLL();</p>
          <p>//......</p>
          <p>}</p>
          
          <p>然后修改testdlg.cpp,修改后如清單9.5。</p>
          
          <p> <b>清單</b><b>95. 
            TestDlg.cpp文件</b></p>
           
          <p>// TestDlg.cpp : implementation file</p>
          <p>//</p>
          <p>#include &quot;stdafx.h&quot;</p>
          <p>#include &quot;Test.h&quot;</p>
          <p>#include &quot;TestDlg.h&quot;</p>
          
          <p>//#include &quot;mymath.h&quot; 
            //注釋掉mymath.h頭文件</p>
           
          <p>#ifdef _DEBUG</p>
          <p>#define new DEBUG_NEW</p>
          <p>#undef THIS_FILE</p>
          <p>static char THIS_FILE[] = __FILE__;</p>
          <p>#endif</p>
          <p>//The instance of the Mymaths.DLL library</p>
          <p>HINSTANCE ghMathsDLL=NULL;</p>
          <p>//declare the Summary() function from the Mymaths.DLL libray.</p>
          <p>typedef int (*SUMMARY)(int);</p>
          <p>SUMMARY Summary;</p>
          <p>//declare the Factorial() function from</p>
          <p>//the Mymaths.DLL library.</p>
          <p>typedef int (*FACTORIAL)(int);</p>
          <p>FACTORIAL Factorial;</p>
          <p>/////////////////////////////////////////////////////////////////////////////</p>
          <p>// CAboutDlg dialog used for App About</p>
          <p>class CAboutDlg : public CDialog</p>
          <p>{</p>
          <p>//...</p>
          <p>};</p>
          
          <p>//CAboutDlg的一些成員函數定義</p>
          <p> //CTestDlg的一些成員函數定義</p>
           
          <p>void CTestDlg::OnSum() </p>
          <p>{</p>
          <p>// TODO: Add your control notification handler code here</p>
          <p>LoadDLL();</p>
          <p>int nSum=Summary(10);</p>
          <p>CString sResult;</p>
          <p>sResult.Format(&quot;Sum(10)=%d&quot;,nSum);</p>
          <p>AfxMessageBox(sResult);</p>
          <p>}</p>
          <p>void CTestDlg::OnFactorial() </p>
          <p>{</p>
          <p>// TODO: Add your control notification handler code here</p>
          <p>LoadDLL();</p>
          <p>int nFact=Factorial(10);</p>
          <p>CString sResult;</p>
          <p>sResult.Format(&quot;10!=%d&quot;,nFact);</p>
          <p>AfxMessageBox(sResult);</p>
          <p>}</p>
          <p>void CTestDlg::LoadDLL()</p>
          <p>{</p>
          
          <p>//如果DLL已經載入,則返回</p>
           
          <p>if(ghMathsDLL!=NULL)</p>
          <p>{</p>
          <p>return; </p>
          <p>}</p>
          
          <p>//載入Mymaths.DLL文件.</p>
           
          <p>ghMathsDLL=LoadLibrary(&quot;mymaths.DLL&quot;);</p>
          
          <p>//如果載入DLL失敗,提示用戶</p>
           
          <p>if(ghMathsDLL==NULL)</p>
          <p>{</p>
          <p>AfxMessageBox(&quot;Cannot load DLL file!&quot;);</p>
          <p>}</p>
          
          <p>//獲得DLL中Summary函數的地址</p>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区综合亚洲| 日韩精品一二区| 亚洲成av人片一区二区三区| 欧美a级一区二区| 不卡电影一区二区三区| 91精品国产入口| 亚洲日本成人在线观看| 精品无人码麻豆乱码1区2区| 色婷婷激情综合| 久久精品欧美一区二区三区不卡| 亚洲成av人**亚洲成av**| 成人久久18免费网站麻豆 | 色噜噜狠狠成人网p站| 欧美一区二区三区免费在线看| 国产精品久久久久国产精品日日| 日韩av中文字幕一区二区| 91丝袜美腿高跟国产极品老师| 91精品国产手机| 亚洲一区二区偷拍精品| 成人在线视频首页| 久久伊99综合婷婷久久伊| 日韩专区欧美专区| 欧美亚洲动漫制服丝袜| 国产精品网站在线| 国产一区二区三区久久久| 51精品秘密在线观看| 尤物在线观看一区| 91香蕉视频污在线| 亚洲国产岛国毛片在线| 国产毛片精品视频| 精品久久一区二区| 日本中文字幕一区| 911精品产国品一二三产区| 夜夜嗨av一区二区三区| 91免费国产在线观看| 国产精品灌醉下药二区| 成人av影视在线观看| 国产精品久久久久久久久久免费看| 国产91精品入口| 国产精品无人区| 成人黄色av网站在线| 国产精品久久久久久久久免费桃花| 成人午夜电影久久影院| 中文字幕精品一区二区三区精品| 国产精品996| 国产精品二区一区二区aⅴ污介绍| 成人高清免费观看| 国产精品久久久久久福利一牛影视 | 欧美日韩成人综合天天影院| 亚洲午夜久久久久中文字幕久| 在线欧美一区二区| 午夜激情综合网| 日韩免费在线观看| 国产伦理精品不卡| 亚洲品质自拍视频网站| 欧美日韩专区在线| 美女视频网站久久| 国产精品欧美久久久久无广告 | 风间由美性色一区二区三区| 国产视频一区二区在线观看| 成人免费视频免费观看| 亚洲欧美激情视频在线观看一区二区三区| 91久久人澡人人添人人爽欧美| 亚洲高清在线精品| 337p日本欧洲亚洲大胆色噜噜| 成人手机在线视频| 亚洲国产精品麻豆| 久久综合九色综合97婷婷女人 | 97久久久精品综合88久久| 亚洲免费视频中文字幕| 91精品国产高清一区二区三区蜜臀| 精品午夜一区二区三区在线观看| 中文字幕在线一区二区三区| 欧美视频一区二区在线观看| 久久精品国产在热久久| 中文字幕在线不卡一区| 91.com视频| 成人av电影在线| 婷婷亚洲久悠悠色悠在线播放| 国产亚洲综合性久久久影院| 欧美日韩在线播放| 国产激情视频一区二区三区欧美| 亚洲一区二区三区不卡国产欧美| 精品福利在线导航| 91久久国产最好的精华液| 国产一区二区在线观看视频| 亚洲一区二区三区不卡国产欧美| 国产喂奶挤奶一区二区三区| 欧美日本韩国一区二区三区视频| 波多野结衣视频一区| 美女性感视频久久| 亚洲成人免费看| 国产精品久久777777| 精品国产乱码91久久久久久网站| 91视频免费观看| 国产高清亚洲一区| 蜜乳av一区二区| 丝袜美腿亚洲综合| 亚洲另类春色校园小说| 欧美国产一区视频在线观看| 日韩你懂的电影在线观看| 欧美性极品少妇| 99国产欧美久久久精品| 国产成人综合网站| 久草在线在线精品观看| 日韩中文字幕区一区有砖一区 | 一区二区三区免费| 中文字幕第一区| 久久一留热品黄| 欧美电影免费提供在线观看| 欧美日韩成人综合在线一区二区| 欧美在线观看一二区| 欧洲国内综合视频| 91免费视频观看| 99精品国产91久久久久久| 不卡高清视频专区| av中文字幕在线不卡| 成人免费毛片app| 国产成人在线观看| 国产高清不卡一区二区| 国产一区二区三区观看| 国模套图日韩精品一区二区| 国内成人精品2018免费看| 狠狠色2019综合网| 国产成人亚洲综合色影视| 国产麻豆精品在线| 成人av集中营| 色综合久久久久综合体桃花网| 99久久婷婷国产综合精品电影 | 亚洲小说欧美激情另类| 亚洲精品中文在线观看| 亚洲高清在线视频| 久久国产尿小便嘘嘘| 国产一区二区三区国产| 9l国产精品久久久久麻豆| 一本久道中文字幕精品亚洲嫩| 欧美性色综合网| 欧美一区二区二区| 久久精品夜色噜噜亚洲a∨| 国产精品水嫩水嫩| 亚洲一线二线三线视频| 免费高清在线视频一区·| 国产在线观看免费一区| 不卡av在线免费观看| 欧美日韩视频不卡| 欧美一二三在线| 欧美激情在线一区二区| 一区二区久久久久久| 蜜臀国产一区二区三区在线播放| 国产麻豆成人精品| 欧美性色欧美a在线播放| 欧美mv日韩mv国产网站| 亚洲欧洲av一区二区三区久久| 亚洲国产精品一区二区www在线| 奇米色777欧美一区二区| jizz一区二区| 欧美精品 日韩| 久久久久99精品国产片| 伊人性伊人情综合网| 麻豆91精品91久久久的内涵| 高清国产一区二区三区| 欧美三级韩国三级日本一级| 精品sm捆绑视频| 伊人色综合久久天天人手人婷| 老司机精品视频在线| 99r国产精品| 精品日韩一区二区三区免费视频| 综合亚洲深深色噜噜狠狠网站| 日韩1区2区3区| 99riav久久精品riav| 日韩精品专区在线| 亚洲精品乱码久久久久久久久| 麻豆成人久久精品二区三区红 | 久久久久久一二三区| 亚洲国产视频网站| 成人免费高清视频| 日韩欧美卡一卡二| 亚洲动漫第一页| 成人av在线电影| 久久精品夜夜夜夜久久| 丝袜国产日韩另类美女| 一本色道**综合亚洲精品蜜桃冫| 久久久三级国产网站| 天堂影院一区二区| 99久精品国产| 久久久久国产免费免费| 卡一卡二国产精品 | 亚洲欧洲日韩av| 国产老妇另类xxxxx| 日韩一区二区在线观看| 亚洲国产va精品久久久不卡综合| 成人黄色免费短视频| 久久午夜免费电影| 天堂一区二区在线免费观看| 在线观看91精品国产入口| 国产精品你懂的在线欣赏| 国产精品一区2区| 欧美xxx久久| 久久99精品视频| 日韩丝袜美女视频|