<wbr id="ede8e"></wbr><bdo id="ede8e"><var id="ede8e"><optgroup id="ede8e"></optgroup></var></bdo>
    1. <sub id="ede8e"></sub>
    2. <sub id="ede8e"></sub>
    3. 18禁无遮挡啪啪无码网站,真人无码作爱免费视频,2018年亚洲欧美在线v,国产成人午夜一区二区三区 ,亚洲精品毛片一区二区,国产在线亚州精品内射,精品无码国产污污污免费,国内少妇人妻偷人精品
      首頁 > 文章中心 > 正文

      MFC插件應(yīng)用程序設(shè)計

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

      MFC插件應(yīng)用程序設(shè)計

      摘要討論了插件應(yīng)用系統(tǒng)的基礎(chǔ)理論及應(yīng)用優(yōu)勢,據(jù)此設(shè)計了基本的插件應(yīng)用系統(tǒng)框架模塊并通過mfc基礎(chǔ)平臺予以具體實現(xiàn)。

      關(guān)鍵字插件;動態(tài)鏈接庫;MFC

      1插件體系結(jié)構(gòu)

      軟件開發(fā)手段的演化,就在于以最小的代價得到更健壯且易于擴展和維護的“好”的應(yīng)用系統(tǒng),開發(fā)工具的持續(xù)改進和開發(fā)思想的進化使得我們有可能實現(xiàn)上述目標(biāo)。

      從面向過程的開發(fā)至面向?qū)ο蟮木幊蹋敝聊壳懊嫦蚪M件的開發(fā),正是上述思維的展現(xiàn)。基于插件的應(yīng)用系統(tǒng)從體系結(jié)構(gòu)設(shè)計出發(fā),著力構(gòu)建低耦合的,靈活可擴展的且支持無編譯熱插拔的應(yīng)用系統(tǒng),通過分析應(yīng)用需求,提煉功能相似的模塊并設(shè)計相應(yīng)的模塊間接口,我們就可以將該部分功能分離出來,綜合來看,基于插件的應(yīng)用系統(tǒng)有以下優(yōu)勢:

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

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

      (3)能夠很好地實現(xiàn)軟件模塊的分工開發(fā),并且能夠大量吸取他人的優(yōu)點。

      (4)可以較好地實現(xiàn)代碼隱藏,保護知識產(chǎn)權(quán)。

      基于插件的體系結(jié)構(gòu)如圖1所示。

      圖1插件應(yīng)用系統(tǒng)體系結(jié)構(gòu)

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

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

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

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

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

      根據(jù)模塊規(guī)劃,插件實現(xiàn)特定的功能并將接口暴露出來,根據(jù)需要,可能還需要調(diào)用主控程序提供的方法以操作資源或數(shù)據(jù)。

      2設(shè)計思路及MFC實現(xiàn)

      據(jù)上述討論,我們設(shè)計一個基本的插件應(yīng)用系統(tǒng)框架,其中主控程序是基于MFC對話框的應(yīng)用程序,插件使用動態(tài)庫實現(xiàn),插件管理部分使用專門的CPluginManager類實現(xiàn),其實現(xiàn)的函數(shù)如圖2所示。

      圖2插件管理類視圖

      就主要函數(shù)說明如表1所示。

      表1插件管理類提供的函數(shù)

      函數(shù)名稱函數(shù)說明

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

      Shutdown釋放資源

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

      Count返回可用插件的個數(shù)

      Run調(diào)用插件提供的函數(shù)接口

      Load載入所有插件

      UnLoad卸載所有插件

      ExtractFilePath提取插件存放路徑

      以Load函數(shù)為例,我們使用STL的MAP數(shù)據(jù)結(jié)構(gòu)存放插件句柄和插件的對應(yīng),代碼如下:

      voidCPluginManager::Load()

      {

      //……相關(guān)變量定義省略

      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));

      }

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

      #ifdefPLUG1_EXPORTS

      #definePLUG_API__declspec(dllexport)

      #else

      #definePLUG_API__declspec(dllimport)

      #endif

      PLUG_APIvoidPluginMain(void)

      {

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

      }

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

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

      {

      m_hTreeItem=m_wndTree.GetSelectedItem();

      CStringplName=

      m_wndTree.GetItemText(m_hTreeItem);

      g_PluginManager->Run(plName);

      *pResult=0;

      }

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

      圖3主控程序運行界面

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

      3結(jié)束語

      開放的組件化體系結(jié)構(gòu)模塊組成清晰,同時也方便了系統(tǒng)擴展和后續(xù)維護,本文從插件應(yīng)用系統(tǒng)的體系結(jié)構(gòu)入手,設(shè)計了主控模塊與插件池的功能要求,給出了插件管理類實現(xiàn)的功能,并基于MFC給出了相應(yīng)的具體實現(xiàn),需要說明的是:

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

      (2)真正的應(yīng)用系統(tǒng)由于插件眾多,不可避免的涉及到插件之間的協(xié)同和沖突檢測,需要在結(jié)構(gòu)設(shè)計上解決。

      (3)插件的實現(xiàn)方式較多,可以根據(jù)具體的應(yīng)用需求和系統(tǒng)規(guī)模選用比較合適的一種。

      總的來看,基于組件的插件應(yīng)用系統(tǒng),由于存在諸多優(yōu)勢,必將帶來更多的應(yīng)用前景和用戶體驗。

      參考文獻

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

      [2]于珊珊,軟件插件技術(shù)及其應(yīng)用研究,電腦學(xué)習(xí),2007,8:55~56

      文檔上傳者
      主站蜘蛛池模板: 亚洲av成人无码天堂| 亚洲精品视频免费| 狠狠色综合久久狠狠色综合| 亚洲护士一区二区三区| 日韩欧国产美一区二区在线| 九九热在线观看免费视频| 国产精品v片在线观看不卡| 巨胸美乳无码人妻视频漫画| 国产系列丝袜熟女精品视频| 亚洲爆乳成av人在线视菜奈实 | 无码一区中文字幕| 在线观看人成视频免费| 午夜av福利一区二区三区| 少妇被无套内谢免费看| 熟女一区二区中文字幕| 五月丁香综合缴情六月小说 | 亚洲男女一区二区三区| 亚洲最大福利视频网| 国产裸体无遮挡免费精品| 久操热在线视频免费观看| √天堂中文www官网在线| 亚洲日本VA中文字幕在线| 成年无码av片在线蜜芽| 国产精品日韩av一区二区| 精品国产中文字幕在线| 麻豆国产传媒精品视频| 99热久久这里只有精品| 国产乱码精品一区二区三| 亚洲区一区二区三区视频| 亚洲精品一区二区动漫| 8AV国产精品爽爽ⅤA在线观看| 国产成人精品久久一区二区| 国产av精品一区二区三区| 国产成人毛片无码视频软件| 99九九视频高清在线| 性男女做视频观看网站| 亚洲国产精品久久无人区| 亚洲av无码之国产精品网址蜜芽| 国产不卡精品视频男人的天堂 | 五月丁香综合缴情六月小说| 老色鬼在线精品视频在线观看|