資源描述:
《windows通信機(jī)制和dll機(jī)制》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、山東科技大學(xué)操作系統(tǒng)課程設(shè)計報告題目:Windows通信機(jī)制和DLL機(jī)制姓名:安文龍學(xué)號:200901051301班級:計算機(jī)09-2班指導(dǎo)老師:房勝學(xué)院:信息科學(xué)與工程學(xué)院目錄一:設(shè)計要求二:背景知識三:設(shè)計環(huán)境四:設(shè)計思想五:程序結(jié)構(gòu)六:關(guān)鍵代碼分析:七:運(yùn)行結(jié)果及分析:八:參考源代碼一:設(shè)計要求編寫一個Windows應(yīng)用程序產(chǎn)生一個窗口,該窗口能對窗口上的消息進(jìn)行響應(yīng),即當(dāng)鼠標(biāo)點(diǎn)擊相應(yīng)區(qū)域或菜單后,程序會調(diào)用自己編寫的DLL函數(shù)給出結(jié)果。編寫一個DLL,至少包含兩個以上的接口函數(shù)供上述應(yīng)用程序調(diào)用。使用C++Win32函數(shù),而不是MFC框架,體會windows消息機(jī)制。二:背景知識
2、圖形化基于視圖的應(yīng)用程序中,窗口就是屏幕上的一塊區(qū)域,在這塊區(qū)域中,應(yīng)用程序取得用戶的輸入,顯示程序的輸出.窗口區(qū)是應(yīng)用程序顯示輸出的部分.應(yīng)用程序必須提供一個稱為窗口函數(shù)的回調(diào)函數(shù)來處理窗口的輸入,向客戶區(qū)顯示輸出.動態(tài)鏈接庫是應(yīng)用程序的一部分,它的任何操作都是代表應(yīng)用程序進(jìn)行的,它作為模塊被進(jìn)程加載到自己的空間地址.動態(tài)鏈接庫在編譯時并不會被加載到可執(zhí)行文件中,在程序運(yùn)行時整個庫的代碼才會調(diào)入內(nèi)存.WinMain入口點(diǎn):函數(shù)功能:該函數(shù)被系統(tǒng)調(diào)用,作為一個32位應(yīng)用程序的入口點(diǎn)?! 『瘮?shù)原型: intWINAPIWinMain( HINSTANCEhInstance, HINS
3、TANCEhPrevInstance, LPSTRlpCmdLine, intnCmdShow ); 參數(shù): hInstance:應(yīng)用程序當(dāng)前事例的句柄。 hPrevlnstance:應(yīng)用程序的先事例的句柄。對于同一個程序打開兩次,出現(xiàn)兩個窗口第一次打開的窗口就是先前實(shí)例的窗口。對于一個32的位程序,該參數(shù)總為NULL。 lpCmdLine:指向應(yīng)用程序命令行的空字符串的指針,不包括函數(shù)名。獲得整個命令行,參看GetCommandLine?! CmdShow:指明窗口如何顯示。窗口類的注冊與創(chuàng)建:函數(shù)原型:HWNDCreateWindow( LPCTSTRlpClass
4、Name, LPCTSTRlpWindowName, DWORDdwStyle, intx, inty, intnWidth, intnHeight, HWNDhWndParent, HMENUhMenu, HANDLEhlnstance, LPVOIDlpParam);參數(shù):lpClassName:窗口類的名字。lpWindowName:窗口名。dwStyle:指定創(chuàng)建窗口的風(fēng)格。x:指定窗口的初始水平位置。y:指定窗口的初始垂直位置。nWidth:指定窗口的寬度。nHeight:指定窗口的高度。hWndParent:指向被創(chuàng)建窗口的父窗口或所有者窗口的句柄。hMe
5、nu:菜單句柄。hlnstance:與窗口相關(guān)的模塊事例的句柄。lpParam:指向一個值的指針,該值傳遞給窗口WM_CREATE消息。DLL基本原理:????????Windows系統(tǒng)平臺上,你可以將獨(dú)立的程序模塊創(chuàng)建為較小的DLL(DynamicLinkableLibrary)文件,并可對它們單獨(dú)編譯和測試。在運(yùn)行時,只有當(dāng)EXE程序確實(shí)要調(diào)用這些DLL模塊的情況下,系統(tǒng)才會將它們裝載到內(nèi)存空間中。這種方式不僅減少了EXE文件的大小和對內(nèi)存空間的需求,而且使這些DLL模塊可以同時被多個應(yīng)用程序使用。MicrosoftWindows自己就將一些主要的系統(tǒng)功能以DLL模塊的形式實(shí)現(xiàn)。例如
6、IE中的一些基本功能就是由DLL文件實(shí)現(xiàn)的,它可以被其它應(yīng)用程序調(diào)用和集成。一般來說,DLL是一種磁盤文件(通常帶有DLL擴(kuò)展名,是標(biāo)準(zhǔn)win32可執(zhí)行文件-“PE”格式),它由全局?jǐn)?shù)據(jù)、服務(wù)函數(shù)和資源組成,在運(yùn)行時被系統(tǒng)加載到進(jìn)程的虛擬空間中,成為調(diào)用進(jìn)程的一部分,進(jìn)程中所有線程都可以調(diào)用其中的函數(shù)。如果與其它DLL之間沒有沖突,該文件通常映射到進(jìn)程虛擬空間的同一地址上。DLL模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。Windows在加載DLL模塊時將進(jìn)程函數(shù)調(diào)用與DLL文件的導(dǎo)出函數(shù)相匹配。????????在Win32環(huán)境中,每個進(jìn)程都復(fù)制了自己的讀/寫全局變量。如果想要與其它進(jìn)程
7、共享內(nèi)存,必須使用內(nèi)存映射文件或者聲明一個共享數(shù)據(jù)段。DLL模塊需要的堆棧內(nèi)存都是從運(yùn)行進(jìn)程的堆棧中分配出來的。????????DLL文件中包含一個導(dǎo)出函數(shù)表(存在于PE的.edata節(jié)中)。這些導(dǎo)出函數(shù)由它們的符號名和稱為標(biāo)識號的整數(shù)與外界聯(lián)系起來。函數(shù)表中還包含了DLL中函數(shù)的地址。當(dāng)應(yīng)用程序加載DLL模塊時時,它并不知道調(diào)用函數(shù)的實(shí)際地址,但它知道函數(shù)的符號名和標(biāo)識號。動態(tài)鏈接過程在加載的DLL模塊時動態(tài)建立一個函數(shù)調(diào)用與函數(shù)