<ruby id="26blz"></ruby>
    1. <pre id="26blz"></pre>
    2. 久久夜色精品国产网站,丁香五月网久久综合,国产特色一区二区三区视频,无码一区二区三区视频,国产成人精品无缓存在线播放,视频区 国产 图片区 小说区,精品一区二区三区日韩版,国模雨珍浓密毛大尺度150p
      首頁 > 文章中心 > 正文

      MFC插件應用程序設計

      前言:本站為你精心整理了MFC插件應用程序設計范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

      MFC插件應用程序設計

      摘要討論了插件應用系統的基礎理論及應用優勢,據此設計了基本的插件應用系統框架模塊并通過mfc基礎平臺予以具體實現。

      關鍵字插件;動態鏈接庫;MFC

      1插件體系結構

      軟件開發手段的演化,就在于以最小的代價得到更健壯且易于擴展和維護的“好”的應用系統,開發工具的持續改進和開發思想的進化使得我們有可能實現上述目標。

      從面向過程的開發至面向對象的編程,直至目前面向組件的開發,正是上述思維的展現。基于插件的應用系統從體系結構設計出發,著力構建低耦合的,靈活可擴展的且支持無編譯熱插拔的應用系統,通過分析應用需求,提煉功能相似的模塊并設計相應的模塊間接口,我們就可以將該部分功能分離出來,綜合來看,基于插件的應用系統有以下優勢:

      (1)實現真正意義上的軟件組件的“即插即用”。

      (2)在二進制級上集成軟件,減少大量的軟件重新編譯與所帶來的麻煩。

      (3)能夠很好地實現軟件模塊的分工開發,并且能夠大量吸取他人的優點。

      (4)可以較好地實現代碼隱藏,保護知識產權。

      基于插件的體系結構如圖1所示。

      圖1插件應用系統體系結構

      從圖1可知,一個完成的基于插件的應用系統共分兩部分:插件主控程序(含插件調度核心模塊)以及插件池(存放所有插件)。主控程序通過核心模塊提供插件管理功能,主要包括:

      (1)注冊及卸載插件:插件在使用之前必須注冊或存放于特定的路徑中,主控程序根據相關配置參數對插件完成初始化工作。

      (2)啟用及禁用插件:主控程序可以根據用戶指令,對某些已裝載的插件予以啟用或禁用。

      (3)顯示插件信息:包括插件描述,開發者信息,版本和版權聲明等。

      (4)配置插件參數:插件本身的運行需要對某些參數進行定制。

      根據模塊規劃,插件實現特定的功能并將接口暴露出來,根據需要,可能還需要調用主控程序提供的方法以操作資源或數據。

      2設計思路及MFC實現

      據上述討論,我們設計一個基本的插件應用系統框架,其中主控程序是基于MFC對話框的應用程序,插件使用動態庫實現,插件管理部分使用專門的CPluginManager類實現,其實現的函數如圖2所示。

      圖2插件管理類視圖

      就主要函數說明如表1所示。

      表1插件管理類提供的函數

      函數名稱函數說明

      Init初始化,搜索所有有效插件

      Shutdown釋放資源

      GetAll得到所有插件名,用CString對象返回,名之間用:隔開

      Count返回可用插件的個數

      Run調用插件提供的函數接口

      Load載入所有插件

      UnLoad卸載所有插件

      ExtractFilePath提取插件存放路徑

      以Load函數為例,我們使用STL的MAP數據結構存放插件句柄和插件的對應,代碼如下:

      voidCPluginManager::Load()

      {

      //……相關變量定義省略

      GetModuleFileName(AfxGetApp()->m_hInstance,filepath,MAX_PATH-1);

      SetCurrentDirectory(ExtractFilePath(filepath));

      CFileFindfinder;

      CStringstrWildCard=_T("*.plx");

      BOOLbWorking=finder.FindFile(strWildCard);

      while(bWorking)

      {

      bWorking=finder.FindNextFile();

      if(finder.IsDots()||finder.IsDirectory())

      continue;

      HMODULEhm=LoadLibrary(finder.GetFilePath());

      if(!hm)

      {//……載入失敗處理代碼}

      elseif(NULL==GetProcAddress(hm,"PluginMain"))

      {//……非可用插件處理代碼}

      else_dllMap.insert(make_pair(finder.GetFileName(),hm));

      }

      插件提供的接口函數如下(僅作為示例,如需其它接口,可照此添加):

      #ifdefPLUG1_EXPORTS

      #definePLUG_API__declspec(dllexport)

      #else

      #definePLUG_API__declspec(dllimport)

      #endif

      PLUG_APIvoidPluginMain(void)

      {

      ::MessageBox(NULL,"插件1測試成功!","Plugin1",MB_OK);

      }

      主控程序使用樹控件展示插件功能,程序初始化時首先調用初始化函數完成控件注冊,然后得到所有控件的名稱并以葉節點的形式顯示出來,用戶雙擊相應的葉節點時,主控程序調用插件提供的函數PluginMain,調用過程如下:

      voidCTreeCtrlDlg::OnDblClkTree(NMHDR*pNMHDR,LRESULT*pResult)

      {

      m_hTreeItem=m_wndTree.GetSelectedItem();

      CStringplName=

      m_wndTree.GetItemText(m_hTreeItem);

      g_PluginManager->Run(plName);

      *pResult=0;

      }

      主控程序運行時及雙擊樹形圖葉節點時界面,如圖3所示。

      圖3主控程序運行界面

      主控程序所在路徑下建立plugin目錄,并存放三個插件文件。

      3結束語

      開放的組件化體系結構模塊組成清晰,同時也方便了系統擴展和后續維護,本文從插件應用系統的體系結構入手,設計了主控模塊與插件池的功能要求,給出了插件管理類實現的功能,并基于MFC給出了相應的具體實現,需要說明的是:

      (1)插件應用系統涉及到主控程序和插件之間的雙向交互,插件也可以利用主控程序提供的接口訪問公共資源和數據,本文對該部分功能未作實現。

      (2)真正的應用系統由于插件眾多,不可避免的涉及到插件之間的協同和沖突檢測,需要在結構設計上解決。

      (3)插件的實現方式較多,可以根據具體的應用需求和系統規模選用比較合適的一種。

      總的來看,基于組件的插件應用系統,由于存在諸多優勢,必將帶來更多的應用前景和用戶體驗。

      參考文獻

      [1]彭永康,章義來,插件及其接口的研究與應用,計算機應用,2003,6:122~123

      [2]于珊珊,軟件插件技術及其應用研究,電腦學習,2007,8:55~56

      文檔上傳者
      主站蜘蛛池模板: 成人性能视频在线| 男人用嘴添女人私密视频| 18国产午夜福利一二区| 国产影片AV级毛片特别刺激| 久久综合激情网| 中国极品少妇videossexhd| 人妻无码久久精品| 国产无遮挡裸体免费久久| 激情国产一区二区三区四区小说 | 亚洲精品国产综合久久一线| 国产精品自拍中文字幕| 国产精品自拍自在线播放| 国产一区二区三区内射高清| 国产日韩综合av在线| 97久久超碰国产精品2021| 国内精品免费久久久久电影院97| 国产成a人片在线观看视频下载| 亚洲国产天堂久久综合226114 | 国产综合精品一区二区在线| 精品国产美女福到在线不卡| 亚洲色偷偷色噜噜狠狠99| 国产嫩草精品网亚洲av| 熟女熟妇乱女乱妇综合网| 丰满少妇熟乱xxxxx视频| 精品一二三四区在线观看| 狠狠躁夜夜躁人人爽天天5| 中文字幕精品亚洲字幕成| 亚洲蜜臀av乱码久久| 最新国产在线拍揄自揄视频| 99国产精品欧美一区二区三区| 成年无码av片在线蜜芽| 性色欲情网站iwww九文堂| 狠狠躁夜夜躁人人爽天天| 精品无套挺进少妇内谢| 国产成人av大片大片| 色伦专区97中文字幕| 精品偷自拍另类精品在线| 欧美日韩精品一区二区三区不卡| 中文字幕日韩精品无码内射| 加勒比中文字幕无码一区| 国产精品色哟哟在线观看|