韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

用DLL為應(yīng)用程序預(yù)留待擴(kuò)展技巧接口

用DLL為應(yīng)用程序預(yù)留待擴(kuò)展技巧接口

更新時(shí)間:2022-10-09 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

動(dòng)態(tài)鏈接函數(shù)庫(kù)(Dynamic Link Library 簡(jiǎn)稱DLL)是組成Windows系統(tǒng)的重要元素之一。Windows將構(gòu)成其系統(tǒng)的大部分程序代碼、數(shù)據(jù)以及經(jīng)常用到的資源,以動(dòng)態(tài)鏈接函數(shù)庫(kù)(二進(jìn)制文件)的形式存貯在磁盤(pán)里。本文主要介紹如何在應(yīng)用程序中預(yù)留待擴(kuò)展功能接口,以及利用DLL編寫(xiě)這類(lèi)擴(kuò)展功能代碼的方法。  

應(yīng)用實(shí)例  
  在開(kāi)發(fā)應(yīng)用程序的時(shí)候考慮到以后可能要添加某些新的功能,為避免修改源程序所帶來(lái)的麻煩,我們可以在開(kāi)發(fā)應(yīng)用程序的過(guò)程中先預(yù)留一個(gè)擴(kuò)展功能接口,以后需要擴(kuò)展功能時(shí),只要把擴(kuò)展功能部分的代碼單獨(dú)編譯成DLL即可。下面是一個(gè)示例程序,該示例程序分為應(yīng)用程序和擴(kuò)展功能兩部分,當(dāng)應(yīng)用程序收到WM_CREATE消息時(shí),檢查是否有擴(kuò)展功能,若有則裝入;否則返回。該程序在Windows 95下,用Borland c++ 4.5調(diào)試通過(guò)。  

  /*------PRAC.C 應(yīng)用程序部分------*/  

  #include <windows.h>  

  #include "prac.h"  

  int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);  

  long FAR PASCAL MainWndProc(HWND, WORD, WORD, LONG);  

  void MsgFilter(HWND , WPARAM );  

  FARPROC LpExtProc ;  

  /*------- WinMain() -------*/  

  int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,  

             LPSTR lpszCmdLine, int nCmdShow)  

  {  

   MSG   msg;  

   HWND   hWnd;  

   WNDCLASS wndclass;  

   if ( ! hPrevInstance )  

     {  

      wndclass.style = CS_HREDRAW | CS_VREDRAW;  

      wndclass.lpfnWndProc = MainWndProc;  

      wndclass.cbClsExtra = 0;  

      wndclass.cbWndExtra = 0;  

      wndclass.hInstance = hInstance;  

      wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);  

      wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);  

      wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);  

      wndclass.lpszMenuName = "OurOwnMenu"; //裝入應(yīng)用程序菜單  

      wndclass.lpszClassName = "Application";  

      if ( ! RegisterClass (&wndclass) )  

       return FALSE;  

     }  

   hWnd = CreateWindow ( "Extend Function" ,  

              "應(yīng)用程序示例",  

              WS_OVERLAPPEDWINDOW,  

              CW_USEDEFAULT,  

              CW_USEDEFAULT,  

              CW_USEDEFAULT,  

              CW_USEDEFAULT,  

              NULL,  

              NULL,  

              hInstance,  

              NULL);  

   If (!hWnd )  

     return FALSE;  

   ShowWindow (hWnd, nCmdShow);  

   UpdateWindow (hWnd);  

   while ( GetMessage (&msg, NULL, 0, 0) )  

     {  

      TranslateMessage (&msg);  

      DispatchMessage (&msg);  

     }  

   return msg.wParam;  

  }  

  /*---------- 主窗口函數(shù) WndProc()-------------*/  

  long FAR PASCAL MainWndProc(HWND hWnd, WORD message,  

                    WORD wParam, LONG lParam)  

  {  

   static HANDLE hLibrary;  

   char szBuf[80];  

   switch(message)  

   {  

     case WM_CREATE:  

     /*讀應(yīng)用程序的初始化文件prac.ini,檢查是否有擴(kuò)展功能的動(dòng)態(tài)鏈接庫(kù),若沒(méi)有則返回;若有則裝入該動(dòng)態(tài)鏈接函接數(shù)庫(kù),并取得接口函數(shù)的地址,對(duì)接口函數(shù)進(jìn)行初始化*/  

       GetPrivateProfileString("MyApp" , "AddMyapp" , "" ,  

                 szBuf,sizeof(szBuf) , "prac.ini");  

       if (szBuf[0] != '\0')  

       if ((hLibrary = LoadLibrary(szBuf)) >= 32)  

        {  

         LpExtProc=(FARPROC)GetProcAddress(hLibrary,  

                  MAKEINTRESOURCE(2));  

         LpExtProc(hWnd , EXTPROC_LOAD);  

        }  

       else  

        MessageBox(hWnd,"Load library failed!","Error",MB_OK);  

       break;  

     case WM_COMMAND:  

       /*函數(shù)MsgFilter( )用來(lái)過(guò)濾菜單消息*/  

       MsgFilter(hWnd , wParam);  

       switch (wParam)  

       {  

         case IDM_COMMAND1: //處理應(yīng)用程序  

         case IDM_COMMAND2: //定義的菜單功  

         case IDM_COMMAND3: //能,此處省略。  

       }  

       return 0;  

     case WM_DESTROY:  

       if(hLibrary != NULL)  

       FreeLibrary(hLibrary);  

       PostQuitMessage(0);  

       break;  

   }  

   return DefWindowProc(hWnd, message, wParam, lParam);  

  }  

/*下面過(guò)濾函數(shù),把菜單消息的來(lái)源分成兩類(lèi),即應(yīng)用程序本身的菜單消息和來(lái)自功能擴(kuò)展部分的菜單消息。應(yīng)用程序把值在MIN_FMT至MAX_FMT之間的菜單消息留給待擴(kuò)展程序使用。如果有來(lái)自擴(kuò)展程序的消息,就通過(guò)接口函數(shù)LpExtProc()把該消息傳送給擴(kuò)展程序,由擴(kuò)展程序負(fù)責(zé)處理該消息*/  

  void MsgFilter(HWND hWnd , WPARAM wParam)  

  {  

   if((wParam >= MIN_FMT)&&(wParam <= MAX_FMT))

    LpExtProc(hWnd , wParam);

   return;

  }

  /*---------------- End of PRAC.C-----------------*/

  /*----------- PRAC.H ----------*/

  #define MIN_FMT       100

  #define MAX_FMT      199

  #define EXTPROC_LOAD   200

  #define IDM_COMMAND1   201

  #define IDM_COMMAND2   202

  #define IDM_COMMAND3   203

  /*---End of PRAC.H ---*/

  ; 應(yīng)用程序的模塊定義文件PRAC.DEF

  NAME     PRAC

  DESCRIPTION  'demonstrate a different system menu'

  EXETYPE    WINDOWS

  STUB      'WINSTUB.EXE'

  CODE      PRELOAD MOVEABLE DISCARDABLE

  DATA     PRELOAD MOVEABLE MULTIPLE

  HEAPSIZE   1024

  STACKSIZE   8192

  EXPORTS    MainWndProc

  ; End of PRAC.DEF

  /*---資源定義文件PRAC.RC---*/

  #include "prac.h"

  OurOwnMenu MENU

  BEGIN

   MENUITEM "Command&1",   IDM_COMMAND1

   MENUITEM "Command&2",   IDM_COMMAND2

   MENUITEM "Command&3",   IDM_COMMAND3

  END

  /*---End of PRAC.RC---*/

  若要擴(kuò)展上面應(yīng)用程序的功能,在不改動(dòng)上述程序的情況下,只需將功能擴(kuò)展部分的代碼編寫(xiě)成動(dòng)態(tài)鏈接函數(shù)庫(kù),編譯成.DLL文件,并在PRAC.INI文件中加入下面語(yǔ)句,即可達(dá)到擴(kuò)展功能的目的。在PRAC.INI中加入:

  [AddApp]

  AddMyapp=c:\win95\system\extproc.dll

  擴(kuò)展功能的動(dòng)態(tài)鏈接函數(shù)庫(kù)代碼如下:

  /*-----EXTPROC_DLL.c-----*/

  #include <windows.h>  

  #include <commdlg.h>  

  #include "extproc_dll.h"  

  HMENU hMenu , hExtMenu;  

  HWND hWndExt = NULL;  

  int FAR PASCAL LibMain(HANDLE hModule , WORD wDataSeg,  

              WORD HeapSize , LPSTR lpszCmdLine)  

  {  

   if(HeapSize != 0)  

    UnlockData(0);  

   return 1;  

  }  

  int FAR PASCAL WEP(int SystemExit)  

  {  

   switch (SystemExit)  

    {  

     case WEP_SYSTEM_EXIT:  

                 return 1;  

     case WEP_FREE_DLL:  

                 return 1;  

     default:  

         return 1;  

    }  

  }  

  /*函數(shù)FMExtensionProc()即為擴(kuò)展功能的處理函數(shù),當(dāng)過(guò)濾函數(shù)檢索到有來(lái)自擴(kuò)展功能的菜單消息時(shí),就調(diào)用該函數(shù)進(jìn)行處理。在此僅以設(shè)置打印機(jī)、選擇字體來(lái)說(shuō)明擴(kuò)展功能的處理過(guò)程,讀者可根據(jù)自己的需要修改*/  

  void FAR PASCAL FMExtensionProc(HWND hWndFMExt , WORD wMessage)  

  {  

   PRINTDLG  pd;  

   CHOOSEFONT fnt;  

   LOGFONT lf;  

   CHOOSECOLOR chclr;  

   DWORD dwColor;  

   DWORD dwCustClrs[16];  

   int i;  

   switch(wMessage)  

     {  

     /*處理FMEVENT_LOAD消息,加載用戶擴(kuò)展功能菜單FMExtMenu*/  

      case EXTPROC_LOAD:  

         hExtMenu = LoadMenu(FMExtInst,"FMExtMenu");  

         hMenu = GetMenu(hWndFMExt);  

         AppendMenu(hMenu,MF_POPUP,hExtMenu ,"擴(kuò)展功能(&E)");  

         SetMenu(hWndFMExt,hMenu);  

         break;  

     /*下面是用戶可自定義的擴(kuò)展功能代碼*/  

      case IDM_PRINTERSETUP: //設(shè)置打印機(jī)  

        pd.lStructSize = sizeof(PRINTDLG);  

        pd.hwndOwner = hWndFMExt;  

        pd.hDevMode  = NULL;  

        pd.hDevNames = NULL;  

        pd.Flags = PD_RETURNDC|PD_SELECTION|PD_PRINTSETUP;  

        pd.nCopies   = 1;  

        PrintDlg((LPPRINTDLG)&pd);  

        break;  

      case IDM_SELECTFONT: //選擇字體  

        fnt.lStructSize = sizeof(CHOOSEFONT);  

        fnt.hwndOwner = hWndFMExt;  

        fnt.hDC     = NULL;  

        fnt.lpLogFont = &lf;  

        fnt.Flags   = CF_SCREENFONTS|CF_EFFECTS;  

        fnt.rgbColors = RGB(0,255,255);  

        fnt.lCustData = 0L;  

        fnt.nFontType = SCREEN_FONTTYPE;  

        fnt.nSizeMin  = 0;  

        fnt.nSizeMax  = 0;  

        ChooseFont(&fnt);  

        break;  

     }  

   return;  

  }  

  /*------------End of EXTPROC_DLL.C------------*/  

  /*----- EXTPROC_DLL.H -----*/  

  #define IDM_PRINTERSETUP 101  

  #define IDM_SELECTFONT  102  

  #define EXTPROC_LOAD   200  

  void FAR PASCAL _export FMExtensionProc(HWND,WORD);  

  /*-----End of EXTPROC_DLL.H -----*/  

  ;資源文件EXTPROC_dll.RC  

  #include "windows.h"  

  #include "extproc_dll.h"  

  FMExtMenu MENU DISCARDABLE  

  BEGIN  

   MENUITEM "Printer&Setup" ,IDM_PRINTERSETUP  

   MENUITEM "Select&Font"  ,IDM_SELECTFONT  

  END  

  ;End of EXTPROC_DLL.RC  

  ;模塊定義文件EXTPROC_DLL.DEF  

  LIBRARY EXTPROC  

  DESCRIPTION 'File Manager Extension DLL'  

  EXETYPE WINDOWS  

  CODE PRELOAD MOVEABLE DISCARDABLE  

  DATA PRELOAD SINGLE SHARED  

  HEAPSIZE 1024  

  EXPORTS  

   WEP @1 RESIDENTNAME  

   FMExtensionProc @2  

  ;End of EXTPROC_DLL.DEF

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
久久久久久久久久久妇女| 蜜桃精品一区二区| 欧美日韩高清在线播放| 亚洲美女视频| 黄色片视频免费| 毛片视频网站在线观看| 小荡货+程雪柔| 国产97在线视频| www.撸撸| 少妇精品视频在线观看| 中文字幕在线免费视频| 熟妇人妻系列aⅴ无码专区友真希| 久久精品国产亚洲a| 国产日韩欧美中文| 午夜精品一二三区| 综合伊思人在钱三区| 亚洲精品一区二区三区樱花| 艳妇乳肉豪妇荡乳av无码福利| 亚洲午夜视频在线| 精品国产一区二区在线观看| 国产精品一区在线看| 久久久久青草大香线综合精品| 亚洲一区二区视频在线播放| 可以免费看黄色的网站| 国产成人自拍网| 国产在成人精品线拍偷自揄拍| 成人黄色中文字幕| 一本大道香蕉8中文在线视频| 久久久97精品| 99热精品在线播放| 日本一区二区三区四区在线观看| 全色精品综合影院| 99精品国产一区二区青青牛奶| 最近国语视频在线观看免费播放| 国产精品日本一区二区三区在线| 国产精品suv一区二区88| 欧美高清中文字幕| 国产ts人妖调教重口男| 三级黄色免费观看| 一起操在线观看| 欧美高清性xxxxhdvideosex| 亚洲国产精品电影在线观看| 国产男女猛烈无遮挡91| 国产又粗又猛又爽又黄的| 久久久久久日本一区99| 亚洲精品在线观看www| 日韩视频第二页| 亚洲丝袜av一区| 日韩永久免费视频| 最新国产中文字幕| 99视频在线精品国自产拍免费观看| 亚洲欧美日韩成人高清在线一区| 久久精品欧美一区二区三区麻豆| 五月天激情国产综合婷婷婷| 97精品在线视频| av资源站久久亚洲| 国产精品中文久久久久久| 天天夜夜亚洲| 欧美成人h版在线观看| 一区二区三区在线观看免费| 欧美一级一区二区三区| 99久久精品免费看国产| 国产麻豆一区二区三区精品| 中文字幕第8页| av人人综合网| 午夜18视频在线观看| 91九色国产在线播放| 99久久亚洲国产日韩美女| 天堂中文在线观看| 午夜精品影视国产一区在线麻豆| 欧美人与性囗牲恔配| 国产一区二区精品| 欧美精品第三页| 狠狠操综合网| 免费大片在线观看www| 一本久久综合亚洲鲁鲁五月天| 欧美日韩电影一区二区三区| 欧美日韩成人免费| 激情黄产视频在线免费观看| 三级三级久久三级久久18| 欧美一级精品片在线看| 日本特黄在线观看| av激情久久| 亚洲区一区二| 奇米影视四色在线| 国产午夜精品美女毛片视频| 懂色av蜜臀av粉嫩av永久| 午夜国产在线视频| 一区二区中文字幕在线观看| 国产尤物av一区二区三区| 美女一区二区在线观看| 校花撩起jk露出白色内裤国产精品| 国产一级淫片a视频免费观看| www.xxxx精品| 成年人视频在线免费| 日本午夜人人精品| 中文字幕在线视频一区二区| 成年人视频网站| 可以看美女隐私的网站| 综合激情亚洲| 欧美在线免费观看| 农村老熟妇乱子伦视频| 性生活免费观看视频| 综合久久久久久久| 在线观看国产成人| 一区二区三区一级片| 精品一区精品二区| 337p日本欧洲亚洲大胆色噜噜| 免费人成视频在线播放| 久久久久久久穴| 伊人久久大香线蕉无限次| 久草免费在线视频| 精品国产一区二区三区不卡| 99热国产在线| 亚洲综合一区中| www.成人免费视频| 成人福利av| 日韩国产激情| 国产精品剧情一区二区在线观看| 毛片在线视频播放| xxav国产精品美女主播| 风间由美一二三区av片| 日韩精品一区二区三区高清免费| 国产精品久久久久秋霞鲁丝| 一区二区高清在线| www.日本在线播放| 国产成人高清精品| 99re资源| 在线观看毛片av| 欧美激情专区| 色av成人天堂桃色av| 一区 二区 三区| 操你啦在线视频| 欧美性片在线观看| 亚洲最大av| 国产精品吊钟奶在线| 亚洲成人av免费在线观看| 色伊人久久综合中文字幕| 久热精品视频在线播放| 九九精品视频在线观看九九| 国产日韩欧美亚洲一区| 久久久精品欧美丰满| 色哟哟国产精品免费观看| yourporn在线观看中文站| 清纯唯美综合亚洲| 美女爽到高潮91| 午夜小视频在线播放| 国产精品一二三四区| 欧美xx网站| 最近中文字幕mv免费高清视频8| 在线毛片观看| 国产精品一级片| 绿色成人影院| www.亚洲天堂网| 国产一级片毛片| 日韩欧美三级在线观看| 免费国产成人看片在线| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 国产欧美精品一区| 亚洲一级一级97网| 91在线直播亚洲| 美女又爽又黄视频毛茸茸| 夜夜躁很很躁日日躁麻豆| www在线观看播放免费视频日本| a级黄色毛片| 日韩视频免费中文字幕| 亚洲色成人一区二区三区小说| 国产精品久久..4399| 亚洲女人天堂色在线7777| 日韩视频一区二区三区在线播放免费观看| 尤物99国产成人精品视频| 97人人做人人爽香蕉精品| 最近免费中文字幕大全免费版视频| 先锋影音欧美官网| 欧美亚洲日本国产| 精品一区二区三区视频| 好男人www社区在线视频夜恋| 国产精品三区www17con| 欧美丝袜美女中出在线| 亚洲精品一区二区三区影院忠贞| 翁止熄痒禁伦短文合集免费视频| 国产va在线播放| av成人免费在线| 夜夜嗨av一区二区三区免费区| 一本一道综合狠狠老| 亚洲国产91| 婷婷六月激情| 国产亚洲欧洲高清一区| 永久免费观看片现看| 日本a级片在线播放| 日本精品在线免费观看| 草莓视频一区二区三区| 黑粗硬长欧美在线视频免费的| 91精品国产91久久久久久青草| 日韩精品高清在线观看| 非洲黑人最猛性xxxx交| 五十路六十路七十路熟婆| 国产91丝袜美女在线播放| 久久精品国产精品国产精品污| www.久久热| 韩曰欧美视频免费观看| 久久高清免费视频| 涩多多在线观看| 传媒av在线| 色综合五月天| 欧美日韩第一视频| 国产午夜久久| 男女av在线| 亚洲精品v日韩精品| 精油按摩中文字幕久久| 91丝袜脚交足在线播放| 亚洲精品视频在线免费| 91精品国产综合久久男男| 日韩av影音先锋| 俺来也官网欧美久久精品| 丝袜脚交免费网站xx| 亚洲一二av| 免费成人深夜夜行p站| 国产精品18毛片一区二区| 午夜剧场成人观在线视频免费观看| 日本成人在线不卡视频| 久久久精品人妻一区二区三区| 欧美激情成人网| 亚洲精品少妇久久久久久| 国产亚洲一区二区手机在线观看| 青青草国产在线| 日韩欧美成人一区二区三区| 中文在线二区| 欧美日韩精品一区二区视频| 国产精品第一页在线| 日韩视频免费在线观看| 91蝌蚪视频九色| www.亚洲在线| 五月天婷婷在线视频| 97福利网站在线观看视频| 天天色综合色| 国产精品mv在线观看| 欧美色视频日本高清在线观看| 成人影院网站ww555久久精品| 国产老妇伦国产熟女老妇视频| 日本一二三不卡视频| 亚洲乱码电影| 日韩区一区二| 国产乱码精品一区二区三区av| 亚洲综合激情另类小说区| 精品三级久久久| 成人黄色小视频在线观看| 人人干狠狠干| 欧美成人久久久免费播放| 亚洲永久无码7777kkk| 精品盗摄一区二区三区| 一级毛片在线观| 精品国产视频一区二区三区| 欧美1区2区3区4区| 久久99精品国产91久久来源| 好吊妞www.84com只有这里才有精品| 国产精品伦一区| 国产欧美综合一区| 欧美激情一区二区三区在线视频| 国产综合香蕉五月婷在线| 日本不卡不码高清免费观看| 亚洲xxx在线观看| 欧美日韩国产一中文字不卡| 精品黑人一区二区三区在线观看| 在线日韩影院| 一区二区三区四区五区精品| 日韩69视频在线观看| 日韩精品久久| 毛片在线免费播放| 色综合av在线| 午夜精品久久久久久久久久久久久| 凹凸成人在线| 欧美熟妇交换久久久久久分类| 亚洲黄色精品| 国产一二在线播放| 欧洲乱码伦视频免费| 一个人看的www视频免费在线观看| 美女av一区二区三区| 成人一区二区视频| 久久经典综合| 伦理欧美一区| 99久久国产视频| 亚洲第一成年人网站| 精品三级久久久久久久电影聊斋| 美乳在线观看| 奇米4444一区二区三区| 国产精品观看在线亚洲人成网| 欧美自拍偷拍| 一区二区三区四区在线观看国产日韩| 在线观看免费视频高清游戏推荐| 国产欧美一区| 国产视频欧美| 中文字幕制服丝袜成人av| 欧美性猛交丰臀xxxxx网站| 天天做天天爱天天爽综合网| 精品电影一区| 欧美一级高清免费| 在线观看欧美| 日韩欧美一区二区三区不卡视频| 成年女人免费视频| 人人香蕉久久| www.麻豆传媒| 在线一区二区不卡| 丰满肉肉bbwwbbww| 欧美福利视频在线观看| 免费成人在线影院| 亚洲精品99| 亚洲调教视频在线观看| 亚洲av综合色区无码一区爱av| 欧美电影免费网站| 国产区精品视频在线观看豆花| 蜜臀久久精品久久久用户群体| 伊人久久亚洲综合| 夜夜躁狠狠躁日日躁婷婷小说| 欧美午夜精品久久久久久孕妇| 久久1电影院| 国产精品羞羞答答在线| 欧美高清在线视频观看不卡| 国产欧美在线看| 欧美一级特黄aaaaaa在线看片| 懂色av一区二区三区在线播放| 欧美在线xxxx| 99久久精品费精品国产| 国产精品自拍视频一区| 深夜福利日韩在线看| 日韩欧美在线123| 日韩欧美亚洲国产一区| 日韩毛片高清在线播放|