隨筆 - 3  文章 - 0  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          •  

          積分與排名

          • 積分 - 1611
          • 排名 - 4224

          最新評論

          閱讀排行榜

          評論排行榜

          講述MFC規則DLL的創建與使用技巧。
          5. MFC規則DLL

            5.1 概述

            MFC規則DLL的概念體現在兩方面:

            (1) 它是MFC的
            
            “是MFC的”意味著可以在這種DLL的內部使用MFC;

            (2) 它是規則的
          “是規則的”意味著它不同于MFC擴展DLL,在MFC規則DLL的內部雖然可以使用MFC,但是其與應用程序的接口不能是MFC。而MFC擴展DLL與應用程序的接口可以是MFC,可以從MFC擴展DLL中導出一個MFC類的派生類。

            Regular DLL能夠被所有支持DLL技術的語言所編寫的應用程序調用,當然也包括使用MFC的應用程序。在這種動態連接庫中,包含一個從CWinApp繼承下來的類,DllMain函數則由MFC自動提供。

            Regular DLL分為兩類:

           ?。?)靜態鏈接到MFC 的規則DLL

            靜態鏈接到MFC的規則DLL與MFC庫(包括MFC擴展 DLL)靜態鏈接,將MFC庫的代碼直接生成在.dll文件中。在調用這種DLL的接口時,MFC使用DLL的資源。因此,在靜態鏈接到MFC 的規則DLL中不需要進行模塊狀態的切換。

            使用這種方法生成的規則DLL其程序較大,也可能包含重復的代碼。

           ?。?)動態鏈接到MFC 的規則DLL

            動態鏈接到MFC 的規則DLL 可以和使用它的可執行文件同時動態鏈接到 MFC DLL 和任何MFC擴展 DLL。在使用了MFC共享庫的時候,默認情況下,MFC使用主應用程序的資源句柄來加載資源模板。這樣,當DLL和應用程序中存在相同ID的資源時(即所謂的資源重復問題),系統可能不能獲得正確的資源。因此,對于共享MFC DLL的規則DLL,我們必須進行模塊切換以使得MFC能夠找到正確的資源模板。

            我們可以在Visual C++中設置MFC規則DLL是靜態鏈接到MFC DLL還是動態鏈接到MFC DLL。如圖8,依次選擇Visual C++的project -> Settings -> General菜單或選項,在Microsoft Foundation Classes中進行設置。


          圖8 設置動態/靜態鏈接MFC DLL



              5.2 MFC規則DLL的創建

            我們來一步步講述使用MFC向導創建MFC規則DLL的過程,首先新建一個project,如圖9,選擇project的類型為MFC AppWizard(dll)。點擊OK進入如圖10所示的對話框。


          圖9 MFC DLL工程的創建


          圖10所示對話框中的1區選擇MFC DLL的類別。

            2區選擇是否支持automation(自動化)技術, automation 允許用戶在一個應用程序中操縱另外一個應用程序或組件。例如,我們可以在應用程序中利用 Microsoft Word 或Microsoft Excel的工具,而這種使用對用戶而言是透明的。自動化技術可以大大簡化和加快應用程序的開發。

            3區選擇是否支持Windows Sockets,當選擇此項目時,應用程序能在 TCP/IP 網絡上進行通信。 CWinApp派生類的InitInstance成員函數會初始化通訊端的支持,同時工程中的StdAfx.h文件會自動include <AfxSock.h>頭文件。

            添加socket通訊支持后的InitInstance成員函數如下:

          BOOL CRegularDllSocketApp::InitInstance()
          {
           if (!AfxSocketInit())
           {
            AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
            return FALSE;
           }
           return TRUE;
          }

            4區選擇是否由MFC向導自動在源代碼中添加注釋,一般我們選擇“Yes,please”。


          圖10 MFC DLL的創建選項

          posted on 2007-08-16 16:15 y 閱讀(198) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 唐河县| 江孜县| 同心县| 桐乡市| 右玉县| 莲花县| 阳东县| 安顺市| 都兰县| 光泽县| 南汇区| 徐州市| 上蔡县| 垦利县| 彭山县| 渑池县| 江陵县| 漳州市| 满洲里市| 洞口县| 汤阴县| 任丘市| 白河县| 夏津县| 阿勒泰市| 巴塘县| 濉溪县| 建水县| 南靖县| 南江县| 西平县| 堆龙德庆县| 汾阳市| 长沙市| 孟连| 商都县| 监利县| 惠东县| 灵川县| 遂宁市| 桂平市|