版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1利用ATL編寫COM組件 1 COM組件與ATL 2 利用ATL創(chuàng)建COM組件 3 在VC和VB中使用COM組件
1利用ATL編寫COM組件121 COM組件與ATL目錄1.1 COM概述
1.2 COM與軟件復用
1.3 與COM有關的概念1.4 ATL簡介 21 COM組件與ATL目錄231.1 COM概述
COM是組件對象模型,在Windows操作系統(tǒng)下COM組件很多,組件是C++面向?qū)ο笏枷朐谲浖I(yè)的應用,它是一種創(chuàng)建二進制軟件組件的體系,是一種與平臺無關、語言無關、分布式的面向?qū)ο蟮捏w系。它不是一種面向?qū)ο蟮恼Z言,而是一種標準,COM描述了如何創(chuàng)建對象的一個模型以及在COM對象間進行通訊所需要的內(nèi)容。因此,從功能上講COM更像一個協(xié)議,一個二進制級別上組件重用的協(xié)議。
31.1 COM概述341.2 COM與軟件復用
在軟件開發(fā)過程中,人們提出軟件的制造能否像硬件的生產(chǎn)一樣,實現(xiàn)規(guī)約化的組裝。答案是肯定的,利用Microsoft的COM技術編寫的組件就可以達到這個目的。軟件復用避免了軟件開發(fā)過程中的重復勞動的解決方案,其出發(fā)點是應用系統(tǒng)的開發(fā)不再采用一切“從零開始”的模式,每個COM組件有自己的屬性和操作,是一個相對獨立運行的實體。從軟件復用種類的定義看,COM技術實質(zhì)上是一種模塊復用的情況。采用組件開發(fā)軟件就像搭積木一樣容易,組件單獨開發(fā)并作為軟件模塊使用,它具有明確的接口,客戶通過這些接口調(diào)用組件所能提供的服務,將多種組件拼裝起來就能構成大型的組件以至建立整個系統(tǒng)。41.2 COM與軟件復用 451.3 與COM有關的概念
1.對象
對象代表現(xiàn)實中的某個實體,是類的實例。在COM中,對象也是類的實例,但是COM對象與面向?qū)ο竽P偷念悓ο笥袇^(qū)別。COM是與軟件開發(fā)語言無關、平臺無關,而面向?qū)ο竽P椭械念悓ο笤诓煌恼Z言下是有區(qū)別的。2.接口
動態(tài)鏈接庫DLL是通過導出一系列函數(shù)來讓客戶程序使用的,只有知道了DLL的導出函數(shù)列表才能使用它。COM組件的載體也是一個DLL,COM組件是通過接口與客戶進行通訊的,但它是一個抽象類(含有純虛函數(shù)的類)。下面是一個接口的簡單定義:51.3 與COM有關的概念
1.對象56與COM有關的概念(2)InterfaceIdeposit:Iunknown{virtualHRESULTGetMoney(int*nMoney)=0;};Iunknown接口很重要,其定義如下:StructIunknown{virtualHRESULTQueryInterface(REFIDiid,void**ppvobj)=0;//查詢是否支持接口virtualULONGAddRef()=0;//引用計數(shù)加1virtualULONGRelease()=0;//引用計數(shù)減1}6與COM有關的概念(2)InterfaceIdeposi67與COM有關的概念(3)3.類與類工廠
類是COM接口的實現(xiàn),所有的COM對象都是COM類的實例。一個COM類也是用一個GUID來標識,在類中稱它為“類標識符”(CLSID:ClassIdentifier)。每個類也有一個字符串名稱,叫做“編程標識符”.4.組件
組件就是實現(xiàn)了指定接口并被封裝在DLL或可執(zhí)行文件中的軟件模塊,它能夠?qū)崿F(xiàn)由接口指定的功能,主要用來創(chuàng)建COM對象的。一個組件包括該COM類和實現(xiàn)該類工廠的程序代碼,有時也稱它為“服務器”。一個組件可以包括多個COM對象,每個COM對象可以實現(xiàn)多個接口。
7與COM有關的概念(3)3.類與類工廠78與COM有關的概念(4)
5.注冊與注冊表組件編好之后,編譯出來的DLL文件還必須在注冊表中注冊后才能被其它用戶使用。因為只有這樣,用戶在創(chuàng)建COM對象時,系統(tǒng)才能在注冊表中獲取相應對象的位置,才能創(chuàng)建對象,對于DLL型的組件,需要調(diào)用RegSvr32.exe來完成,對于EXE型的組件,只要服務器運行過一次,該組件就會自動進行注冊。返回
8與COM有關的概念(4)5.注冊與注冊表891.4 ATL簡介
ATL(ActiveXTemplateLibrary,活動模板庫)是一套C++的模板庫,利用它可以很方便地建立小型的、基于COM的組件,對COM組件的開發(fā)提供了最大限度的代碼自動生成以及可視化的支持。模板是ATL的核心技術。1.什么是模板
模板(Template)是基于類型參數(shù)產(chǎn)生類和函數(shù)的一種機制。模板在不降低類型安全的基礎上,可以顯著地減少代碼量,增加代碼的靈活性。模板包括函數(shù)模板和類模板,本節(jié)只講類模板。2.類模板類是對問題空間的抽象,而類模板則是對類的抽象,即更高層次上的抽象。使用類模板,可以指定操作于某個數(shù)據(jù)類型的一族類。在程序中,可以首先定義一個類模板,然后通過使用不同的實參生成不同模板類的對象。91.4 ATL簡介 ATL(Act910ATL簡介(續(xù))類模板的定義方法為:template<class類型參數(shù)>class類名{
……};類模板的具體內(nèi)容與普通類沒有本質(zhì)的區(qū)別,只是其員中要用到類模板的類型參數(shù)?!纠?5-1】一個類模板實例。程序的主文件名為MyTemplate.cpp。10ATL簡介(續(xù))類模板的定義方法為:10112 利用ATL創(chuàng)建COM組件
本節(jié)以一個字符串處理的組件為例來闡述如何利用ATL來制作COM組件。編程的思路為:(1)在VC下創(chuàng)建一個ATL工程,并對工程的可選項進行設置;(2)向工程中添加ATL對象,并對該對象進行一些初始配置工作;(3)根據(jù)COM組件的功能,向新的ATL對象中加入新的接口定義,包括方法和事件的定義,并實現(xiàn)相應的接口成員函數(shù);(4)編譯鏈接該工程,注冊COM組件;(5)編寫組件測試程序,驗證組件的功能。112 利用ATL創(chuàng)建COM組件 本節(jié)以一個字符串處理的組1112利用ATL創(chuàng)建COM組件目錄2.1 創(chuàng)建ATL應用程序框架2.2 在工程中添加ATL對象2.3 在COM組件中添加方法2.4 ATL中的字符串數(shù)據(jù)類型2.5 編譯IDL并注冊COM組件
12利用ATL創(chuàng)建COM組件目錄12132.1 創(chuàng)建ATL應用程序框架
1.在VC開發(fā)環(huán)境下,選擇File|New菜單,將彈出的New對話框切換到Projects選項卡后,選擇ATLCOMAppWizard項,在Projectname編輯框中輸入MyCom工程名稱,并設置好工程所在的文件夾。如圖右圖所示。
132.1 創(chuàng)建ATL應用程序框架
1.在VC開發(fā)環(huán)境下,1314創(chuàng)建ATL應用程序框架(續(xù))2.單擊“OK”按鈕,進入圖2所示的選擇ATL組件類型對話框。
2選擇COM組件類型對話框14創(chuàng)建ATL應用程序框架(續(xù))2.單擊“OK”按鈕,進入圖1415創(chuàng)建ATL應用程序框架(續(xù)) ATL組件類型一共有三種:第一種是DLL類型;第二種是EXE類型;第三種是Service類型,它也是一個典型的進程外組件。Service是Windows2000的一種應用服務,當操作系統(tǒng)啟動的時候,該Server自動運行。由于進程外組件的執(zhí)行效率較低,我們選擇DLL類型的。選擇完后,按“Finish”按鈕,結(jié)束ATL創(chuàng)建組件的向?qū)刹襟E,最終在磁盤上生成了組件的框架代碼。表1列出了該工程中的主要文件的信息。15創(chuàng)建ATL應用程序框架(續(xù)) ATL組件類型一共有三種1516表1AppWizard生成的MyCom工程中的文件
return文件名文件說明MyCom.cpp工程的主文件,其中有組件的接口函數(shù)和注冊函數(shù)MyCom.def工程的DLL模塊定義文件,它與前面講的DLL庫中的Def文件的含義相同MyCom.idl工程的接口定義語言文件,COM是靠接口定義語言來定義組件間、組件與客戶間的接口定義,它是COM組件的入口點MyCom.rc工程的資源文件,與別的MFC程序的資源文件類似Resouce.h工程的資源文件的頭文件,與別的MFC程序的resource.h類似Stdafx.h工程的標準頭文件,與別的MFC程序的stdafx.h類似Stdafx.cpp工程的標準實現(xiàn)文件,與別的MFC程序的stdafx.cpp類似Str.rgs工程的注冊腳本文件16表1AppWizard生成的MyCom工程中的文件16172.2 在工程中添加ATL對象1.選擇Insert|NewATLObject,彈出如圖3所示的對話框,從Objects列表框中選擇SimpleObject項后,單擊“Next”按鈕繼續(xù)。圖3插入一個基于ATL的COM類
前面已經(jīng)創(chuàng)建了一個MyCom工程,接下來,使用VC的ATLObjectWizard工具,可以方便地往工程中添加ATL對象。172.2 在工程中添加ATL對象1.選擇Insert|Ne17182.2 在工程中添加ATL對象(續(xù))2.系統(tǒng)彈出一個ATLObjectWizardProperties對話框。在ShortName中輸入Str,在COClass編輯框中輸入StrCom,如圖4所示。注意在Name選項卡中,可以鍵入類與文件名。默認情況在,ShortName名字是其它名字的詞根??梢圆唤邮漳J的名字而鍵入自己的名稱。圖4窗口中的Class是對象所實現(xiàn)的類的名稱,CoClass為包含對象支持的一些接口的名稱,Interface為對象創(chuàng)建的接口名字,Type為有關注冊對象的描述性字符串,ProgID為容器所使用的名字以代替對象的CLSID。
圖4設置COM類的屬性182.2 在工程中添加ATL對象(續(xù))2.系統(tǒng)彈出一個AT18192.2 在工程中添加ATL對象(續(xù))3.切換到圖5所示的Attribute選項卡,設置StrCom對象的屬性,如組件的線程模式、接口類以及是否支持聚集等屬性。我們使用系統(tǒng)的默認屬性。單擊“OK”按鈕,就生成了一個StrCom組件對象。圖5設置組件對象的屬性圖192.2 在工程中添加ATL對象(續(xù))3.切換到圖5所示的19202.3 在COM組件中添加方法
1.方法的添加進入Workspace窗口的ClassView面板,在IStr接口上右擊鼠標,選擇AddMethod菜單項后,彈出如圖6所示的增加方法接口對話框,在MethodName編輯框中輸入FirstToUpper,在Parameters編輯框中輸入“[in]BSTRInData,[out]BSTR*OutData,[out,retval]long*result”后,按OK按鈕結(jié)束方法的添加。
圖6添加FirstToUpper方法202.3 在COM組件中添加方法
1.方法的添加20212.3 在COM組件中添加方法(續(xù))第一個參數(shù)為InData,它是具有“in”屬性的字符串變量,它是輸入?yún)?shù),代表欲轉(zhuǎn)換的字符串;第二個參數(shù)為outData,它是具有“out”屬性的字符串變量,它是輸出參數(shù),代表轉(zhuǎn)換完后的的字符串;第三個參數(shù)為result,它是具有“out”和“retval”屬性,意思是說該參數(shù)是作為返回值來用的輸出參數(shù),其類型是指向長整型的指針變量。此時用戶在ClassView中就可以看到Istr接口中的FirstToUpper的方法。如圖7所示。
圖7Istr接口的方法FirstToUpper212.3 在COM組件中添加方法(續(xù))21222.3 在COM組件中添加方法(續(xù))2.方法的實現(xiàn)在Workspace窗口的ClassView面板中,將類CStr展開,接著,再將該類中的Istr接口展開,雙擊方法FirstToUpper(char*source,char*destion),光標定位到該類的實現(xiàn)文件處,在其中添加代碼。STDMETHODIMPCStr::FirstToUpper(BSTRInData,BSTR*OutData,long*result){ CComBSTRstrSource=InData;boolbMayUpper=true;//是否可以大寫的標志 for(inti=0;i<strSource.Length();i++) { if(strSource[i]>='a'&&strSource[i]<='z'&&bMayUpper) { strSource[i]=strSource[i]-32; bMayUpper=false; } if(strSource[i]=='')bMayUpper=true; } return*result;}222.3 在COM組件中添加方法(續(xù))2.方法的實現(xiàn)22232.4 ATL中的字符串數(shù)據(jù)類型
由于COM組件是跨平臺與開發(fā)語言的,利用ATL開發(fā)出來的組件在VB等別的開發(fā)工具下也可以使用。ATL中使用的是C++語言,別的開發(fā)工具所使用的語言和C++的數(shù)據(jù)類型是有區(qū)別的,那么在不同的語言之間如何進行數(shù)據(jù)的交換呢?這要靠組件接口中提供的多語言通用類型的數(shù)據(jù)類型,規(guī)定通用類型也是COM組件的一個組成部分。232.4 ATL中的字符串數(shù)據(jù)類型 23242.4 ATL中的字符串數(shù)據(jù)類型(續(xù))1.BSTR
用COM技術來設計組件以及構件系統(tǒng)時,字符串常用BSTR來表示。BSTR是BASICString的簡稱,常用于BASIC的編程中。該類型是包含長度前綴的,以0結(jié)束的字符串,長度前綴表示該字符串所包含的字節(jié)數(shù)。COM提供了一些API函數(shù)來管理BSTR。如SysAllocString()(創(chuàng)建并初始化一個字符串),SysAllocStringLen()(創(chuàng)建一個指定長度的字符串),SysFreeString()(釋放一個字符串),SysReAllocString()(改變字符串的長度),SysStringLen()(返回字符串的長度)等。在VC客戶端一般調(diào)用SysAllocString()創(chuàng)建字符串,以[In]參數(shù)方式傳遞給組件中的方法,調(diào)用完成后用SysFreeString()來釋放字符串的緩沖區(qū)。
BSTRstr=SysAllocString(”areyouready?”);HRESULThr=p->FirstToUpper(str);SysFreeString(str);242.4 ATL中的字符串數(shù)據(jù)類型(續(xù))1.BSTR24252.4 ATL中的字符串數(shù)據(jù)類型(續(xù))2.CComBSTR CComBSTR是ATL封裝的一個來使用BSTR數(shù)據(jù)類型的類,如果把BSTR看作各種語言都可以使用的共同數(shù)據(jù)類型的話,那么CComBSTR則就是在C++下操縱COM中的一個數(shù)據(jù)類型。
CComBSTR類中有一些重要的函數(shù),如Append()(增加一個字符串),AppendBSTR()(增加一個BSTR字符串),Copy()(返回成員變量m_str的值),Empty()(釋放成員變量m_str的值),Length()(返回BSTR的長度)等。252.4 ATL中的字符串數(shù)據(jù)類型(續(xù))2.CComBST25262.5 編譯IDL并注冊COM組件1.IDL簡介
COM接口通常用“接口定義語言”IDL來定義,IDL是一種類似于C++的語言,前一節(jié)設計了一個MyCom組件,下面是其接口MyCom.idl的內(nèi)容:2.編譯IDL
上述Mycom.idl文件我們并未編寫,這完全歸功于ATL工具,是它幫助我們自動完成了IDL接口文件。前面在給組件中添加方法的過程中,向?qū)ё詣油瓿闪薎DL文件。 切換到WorkSpace的FileView面板中,在MyCom.idl文件上右鍵單擊鼠標,選擇CompileMyCom.idl菜單項,于是在磁盤上生成了接口定義文件對應的二進制文件Mycom.tlb。該文件中含有接口中所定義的方法的記錄,定義了組件的虛函數(shù)指針表。.tlb可以看作是二進制的接口定義語言。262.5 編譯IDL并注冊COM組件1.IDL簡介26272.5 編譯IDL并注冊COM組件(續(xù))//MyCom.idl:IDLsourceforMyCom.dll//ThisfilewillbeprocessedbytheMIDLtoolto//producethetypelibrary(MyCom.tlb)andmarshallingcode.import"oaidl.idl";import"ocidl.idl"; [object, uuid(F1CDC043-28E4-44D0-A4A6-BB8654CD7C02), dual, helpstring("IStrInterface"), pointer_default(unique) ] interfaceIStr:IDispatch {[id(1),helpstring("methodFirstToUpper")]HRESULTFirstToUpper([in]BSTRInData,[out]BSTR*OutData,[out,retval]long*result);};[uuid(D30786A1-E559-43D4-A62B-9A9FA0C559B1), version(1.0), helpstring("MyCom1.0TypeLibrary")]272.5 編譯IDL并注冊COM組件(續(xù))//MyCom27282.5 編譯IDL并注冊COM組件(續(xù))libraryMYCOMLib{ importlib("stdole32.tlb"); importlib("stdole2.tlb"); [ uuid(9618DF64-B84E-43BF-8A9C-3634E6A9F88F), helpstring("StrClass") ] coclassStrCom { [default]interfaceIStr; };};282.5 編譯IDL并注冊COM組件(續(xù))library28292.5編譯IDL并注冊COM組件(續(xù))3.注冊MyCom.dll要想讓用戶能夠“透明”地使用創(chuàng)建的組件,首先必須將該組件注冊。單擊Build|BuildMycom.dll菜單項,VC編譯器將生成該組件文件MyCom.dll,并且自動完成注冊。其中注冊的代碼在MyCom.cpp中。還有一種手工注冊組件的方法是利用RegSvr32.exe來進行,請參閱1.3中的5小節(jié)注冊與注冊表的說明。292.5編譯IDL并注冊COM組件(續(xù))3.注冊MyCo29303 在VC和VB中使用COM組件內(nèi)容3.1調(diào)用COM組件的過程3.2在VC中創(chuàng)建COM組件客戶3.3在VB中使用COM組件
303 在VC和VB中使用COM組件內(nèi)容30313.1 調(diào)用COM組件的過程
Windows系統(tǒng)下有大量的組件可供使用,前面我們所創(chuàng)建的MyCom組件也注冊好了,因此也可以使用,使用COM組件過程是一個典型的客戶/服務器(Client/Server)方式。COM組件含有被調(diào)用的接口,它是提供服務的,因此是服務方。
Windows系統(tǒng)下的組件如同一大堆積木,不同的人建房子所使用的積木也不一樣,因此不同的人使用的COM組件也不一樣,但它們有共同的使用過程:首先客戶程序要獲取包含組件的服務器(如MyCom.dll就是提供了字符串轉(zhuǎn)化的服務器),然后讓服務器創(chuàng)建組組件相關聯(lián)的類工廠,再由類工廠實例化組件,最后通過接口來使用組件。313.1 調(diào)用COM組件的過程31323.2 在VC中創(chuàng)建COM組件客戶1.打開上一節(jié)的MyCom工程后,選擇File|New菜單,將彈出的New對話框切換到Projects選項卡后,選擇MFCAppWizard(exe)項,在Projectname編輯框中輸入ComClient工程名稱,并選擇AddToCurrentWorkspace單選擇按鈕。如圖8所示。圖8在MyCom工作區(qū)中添加MyComClient工程323.2 在VC中創(chuàng)建COM組件客戶1.打開上一32333.2 在VC中創(chuàng)建COM組件客戶(2)2.單擊“OK”按鈕進入向?qū)乱徊襟E,選擇單文檔應用程序類型。完后按“Finish”按鈕生成ComClient工程(這是在一個工作區(qū)中包含兩個工程的情況)。
3.在對話框資源IDD_COMCLIENT_DIALOG中添加圖9所示的控件,這些控件的屬性如表2所示。圖9對話框界面設計333.2 在VC中創(chuàng)建COM組件客戶(2)2.單擊“OK”33343.2在VC中創(chuàng)建COM組件客戶(3)控件類型屬性值對應成員變量靜態(tài)文本控件IDIDC_STATIC
Caption源串
IDIDC_STATIC
Caption目標串
編輯框控件IDIDC_EDIT1m_strSource
IDIDC_EDIT2m_strDestion按鈕控件IDIDOK
Caption退出
IDIDC_BUTTON1
Caption轉(zhuǎn)換
表2控件的屬性設置與對應的成員變量設置
return343.2在VC中創(chuàng)建COM組件客戶(3)控件類型屬性值對34353.2在VC中創(chuàng)建COM組件客戶(4)
4.在工程中添加Istr類按CTR+W打開類向?qū)υ捒蚝?,在當前的工程中加入COM中的一個類。方法為在類向?qū)У腗essageMap選項卡下,單擊“AddClass”按鈕,彈出選項“FromaTypeLibrary”如圖10。單擊“FromaTypeLibrary”選項,出現(xiàn)圖11的對話框,把Mycom.tlb選上,又出現(xiàn)圖12的對話框,把Istr類選上,按“OK”按鈕,這樣就把創(chuàng)建的MyCom.tlb中的類Istr加入到該工程中。
圖10從類型庫中增加類353.2在VC中創(chuàng)建COM組件客戶(4)35363.2在VC中創(chuàng)建COM組件客戶(5)
返回
圖11選擇Mycom.tlb圖12選擇類型庫中的IStr類
363.2在VC中創(chuàng)建COM組件客戶(5)返36373.2 在VC中創(chuàng)建COM組件客戶(6)5.主要代碼(1)在應用程序類的InitInstance()函數(shù)中增加初始化OLE的代碼BOOLCComClientApp::InitInstance(){AfxEnableControlContainer();AfxOleInit();//初始化OLE……}(2)“轉(zhuǎn)換”按鈕的實現(xiàn)代碼voidCComClientDlg::OnButton1(){IStrm_string;if(!m_string.CreateDispatch("MyCom.str.1"))//初始化COM庫MessageBox("CreateUserInfoerror");UpdateData(true);//將前臺數(shù)據(jù)傳到后臺BSTRbstrDestion=SysAllocString(L"");m_string.FirstToUpper(m_strSource,&bstrDestion);//調(diào)用COM組件中的方法m_strDestion=bstrDestion;UpdateData(false); //將后臺數(shù)據(jù)傳到前臺}373.2 在VC中創(chuàng)建COM組件客戶(6)5.主要代碼37383.3 在VB中使用COM組件
前面用ATL創(chuàng)建了一個COM組件MyCom,該組件包含有一個類型庫。因為類型庫使得可以在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備維修準備方案
- 門頭安裝施工方案
- 租房開放陽臺改造方案
- 綠化養(yǎng)護管理方案投標
- 2025年中國健康體檢設備行業(yè)市場發(fā)展監(jiān)測及投資潛力預測報告
- 2025年中國電視遙控行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年氮氫膜分離器項目可行性研究報告
- 2024-2030年中國替卡西林鈉行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略研究報告
- 2025年攝影器材租賃居間服務合同模板6篇
- 福州2024年福建福州市鼓樓區(qū)衛(wèi)健系統(tǒng)招聘51人筆試歷年參考題庫附帶答案詳解
- 河南省鄭州外國語高中-【高二】【上期中】【把握現(xiàn)在 蓄力高三】家長會【課件】
- 天津市武清區(qū)2024-2025學年八年級(上)期末物理試卷(含解析)
- 2025年中煤電力有限公司招聘筆試參考題庫含答案解析
- 企業(yè)內(nèi)部控制與財務風險防范
- 高端民用航空復材智能制造交付中心項目環(huán)評資料環(huán)境影響
- 建設項目施工現(xiàn)場春節(jié)放假期間的安全管理方案
- 胃潴留護理查房
- 污水處理廠運營方案計劃
- 山東省高等學校精品課程
- 三菱張力控制器LE-40MTA-E說明書
- 生活垃圾填埋場污染控制標準
評論
0/150
提交評論