![動(dòng)態(tài)鏈接庫(kù)(DLL)編程深入淺出(3)精品文檔11頁(yè)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/e703ecb8-75c8-419e-bc7f-81cfb3f989ba/e703ecb8-75c8-419e-bc7f-81cfb3f989ba1.gif)
![動(dòng)態(tài)鏈接庫(kù)(DLL)編程深入淺出(3)精品文檔11頁(yè)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/e703ecb8-75c8-419e-bc7f-81cfb3f989ba/e703ecb8-75c8-419e-bc7f-81cfb3f989ba2.gif)
![動(dòng)態(tài)鏈接庫(kù)(DLL)編程深入淺出(3)精品文檔11頁(yè)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/e703ecb8-75c8-419e-bc7f-81cfb3f989ba/e703ecb8-75c8-419e-bc7f-81cfb3f989ba3.gif)
![動(dòng)態(tài)鏈接庫(kù)(DLL)編程深入淺出(3)精品文檔11頁(yè)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/e703ecb8-75c8-419e-bc7f-81cfb3f989ba/e703ecb8-75c8-419e-bc7f-81cfb3f989ba4.gif)
![動(dòng)態(tài)鏈接庫(kù)(DLL)編程深入淺出(3)精品文檔11頁(yè)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/e703ecb8-75c8-419e-bc7f-81cfb3f989ba/e703ecb8-75c8-419e-bc7f-81cfb3f989ba5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第4節(jié)我們對(duì)非 MFC DLL進(jìn)行了介紹,這一節(jié)將詳細(xì)地講述 MFC規(guī)則DLL的創(chuàng)建與使用 技巧。另外,自從本文開始連載后,收到了一些讀者的e-mail。有的讀者提出了一些問題,筆者將在本文的最后一次連載中選取其中的典型問題進(jìn)行解答。由于時(shí)間的關(guān)系,對(duì)于讀者朋友的來信,筆者暫時(shí)不能一一回復(fù),還望海涵!由于筆者的水平有限,文中難免有錯(cuò)誤和紕漏,也熱誠(chéng)歡迎讀者朋友不吝指正!5. MFC 規(guī)則 DLL5.1概述MFC規(guī)則DLL的概念體現(xiàn)在兩方面:(1)它是MFC的“是MFC的”意味著可以在這種DLL的內(nèi)部使用 MFC ;(2)它是規(guī)則的“是規(guī)則的”意味著它不同于 MFC擴(kuò)展DLL,在MFC規(guī)則DLL
2、的內(nèi)部雖然可以使用 MFC,但是其與應(yīng)用程序的接口不能是 MFC。而MFC擴(kuò)展DLL與應(yīng)用程序的接口可以是 MFC,可以從 MFC擴(kuò)展DLL中導(dǎo)出一個(gè) MFC類的派生類。Regular DLL能夠被所有支持 DLL技術(shù)的語(yǔ)言所編寫的應(yīng)用程序調(diào)用,當(dāng)然也包括使 用MFC的應(yīng)用程序。在這種動(dòng)態(tài)連接庫(kù)中,包含一個(gè)從CWinApp繼承下來的類,DllMain函數(shù)則由MFC自動(dòng)提供。Regular DLL分為兩類:(1)靜態(tài)鏈接到MFC的規(guī)則DLL靜態(tài)鏈接到 MFC的規(guī)則DLL與MFC庫(kù)(包括 MFC擴(kuò)展DLL )靜態(tài)鏈接,將 MFC 庫(kù)的代碼直接生成在.dll文件中。在調(diào)用這種DLL的接口時(shí),MFC使
3、用DLL的資源。因此, 在靜態(tài)鏈接到 MFC的規(guī)則DLL中不需要進(jìn)行模塊狀態(tài)的切換。使用這種方法生成的規(guī)則 DLL其程序較大,也可能包含重復(fù)的代碼。(2)動(dòng)態(tài)鏈接到 MFC的規(guī)則DLL動(dòng)態(tài)鏈接到MFC的規(guī)則DLL可以和使用它的可執(zhí)行文件同時(shí)動(dòng)態(tài)鏈接到MFC DLL和任何MFC擴(kuò)展DLL。在使用了 MFC共享庫(kù)的時(shí)候,默認(rèn)情況下,MFC使用主應(yīng)用程序 的資源句柄來加載資源模板。這樣,當(dāng)DLL和應(yīng)用程序中存在相同ID的資源時(shí)(即所謂的資源重復(fù)問題),系統(tǒng)可能不能獲得正確的資源。因此,對(duì)于共享MFC DLL的規(guī)則DLL,我們必須進(jìn)行模塊切換以使得MFC能夠找到正確的資源模板。我們可以在 Visual
4、 C+中設(shè)置MFC規(guī)則DLL是靜態(tài)鏈接到 MFC DLL還是動(dòng)態(tài)鏈接到 MFCDLL。如圖 8,依次選擇 Visual C+ 的 project -> Settings -> General 菜單或選項(xiàng),在 MicrosoftFoundation Classes 中進(jìn)行設(shè)置。圖8設(shè)置動(dòng)態(tài)/靜態(tài)鏈接MFC DLL5.2 MFC 規(guī)則 DLL的創(chuàng)建我們來一步步講述使用MFC向?qū)?chuàng)建MFC規(guī)則DLL的過程,首先新建一個(gè)project,如圖9,選擇project的類型為 MFC AppWizard(dll)。點(diǎn)擊OK進(jìn)入如圖10所示的對(duì)話框。 圖9 MFC DLL工程的創(chuàng)建第1頁(yè)圖10所示
5、對(duì)話框中的1區(qū)選擇MFC DLL的類別。2區(qū)選擇是否支持automation (自動(dòng)化)技術(shù),automation允許用戶在一個(gè)應(yīng)用程序中 操縱另外一個(gè)應(yīng)用程序或組件。例如,我們可以在應(yīng)用程序中利用Microsoft Word或Microsoft Excel的工具,而這種使用對(duì)用戶而言是透明的。自動(dòng)化技術(shù)可以大大簡(jiǎn)化和加快 應(yīng)用程序的開發(fā)。3區(qū)選擇是否支持 Windows Sockets,當(dāng)選擇此項(xiàng)目時(shí),應(yīng)用程序能在TCP/IP網(wǎng)絡(luò)上進(jìn)行通信。CWinApp派生類的InitInstanee成員函數(shù)會(huì)初始化通訊端的支持,同時(shí)工程中的StdAfx.h 文件會(huì)自動(dòng) include <AfxSo
6、ck.h> 頭文件。添加socket通訊支持后的Initlnstanee成員函數(shù)如下:BOOL CRegularDIISocketApp:lnitlnstance()if (!AfxSocketlnit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;return TRUE;4區(qū)選擇是否由 MFC向?qū)ё詣?dòng)在源代碼中添加注釋,一般我們選擇“Yes,please”'。圖10 MFC DLL的創(chuàng)建選項(xiàng)5.3 一個(gè)簡(jiǎn)單的MFC規(guī)則DLL這個(gè)DLL的例子(屬于靜態(tài)鏈接到 MFC的規(guī)則DLL )中提供了一個(gè)如圖11所示的對(duì) 話框。圖1
7、1 MFC規(guī)則DLL例子在DLL中添加對(duì)話框的方式與在MFC應(yīng)用程序中是一樣的。在圖11所示DLL中的對(duì)話框的 Hello按鈕上點(diǎn)擊時(shí)將 MessageBox 個(gè)“ Hello,pconline 的網(wǎng)友”對(duì)話框,下面是相關(guān)的文件及源代碼,其中刪除了MFC向?qū)ё詣?dòng)生成的絕大多數(shù)注釋(下載本工程 附件):第一組文件:CWinApp繼承類的聲明與實(shí)現(xiàn)/ RegularDll.h : main header file for the REGULARDLL DLL#if !defined(AFX_REGULARDLL_H_3E9CB22B_588B_4388_B778_B3416ADB79B3_INCL
8、UDED#define AFX_REGULARDLL_H_3E9CB22B_588B_4388_B778_B3416ADB79B3_INCLUDED_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000#ifndef _AFXWIN_H_#error include 'stdafx.h' before including this file for PCH#endif#include "resource"" / main symbolsclass CRegularDllApp :
9、 public CWinApppublic:CRegularDIIApp();DECLARE_MESSAGE_MAP();#endif/ RegularDll.cpp : Defines the initialization routines for the DLL.#include "stdafx.h"#include "RegularDll.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifBEGIN_MESSAGE_MAP
10、(CRegularDIIApp, CWinApp)END_MESSAGE_MAP()/ CRegularDllApp constructionCRegularDllApp:CRegularDllApp()/ The one and only CRegularDllApp objectCRegularDllApp theApp;分析:在這一組文件中定義了一個(gè)繼承自 CWinApp的類CRegularDllApp,并同時(shí)定義了其的 一個(gè)實(shí)例theApp。乍一看,您會(huì)以為它是一個(gè) MFC應(yīng)用程序,因?yàn)?MFC應(yīng)用程序也包含 這樣的在工程名后添加“ App ”組成類名的類(并繼承自 CWinApp類)
11、,也定義了這個(gè)類的 一個(gè)全局實(shí)例theApp。我們知道,在 MFC應(yīng)用程序中 CWinApp取代了 SDK程序中 WinMain的地位,SDK程序WinMain所完成的工作由 CWinApp的三個(gè)函數(shù)完成:virtual BOOL lnitApplication();virtual BOOL lnitlnstance();virtual BOOL Run( ); /傳說中MFC程序的“活水源頭”但是MFC規(guī)則DLL并不是MFC應(yīng)用程序,它所繼承自 CWinApp的類不包含消息循 環(huán)。這是因?yàn)?,MFC規(guī)則DLL不包含CWinApp:Run機(jī)制,主消息泵仍然由應(yīng)用程序擁有。 如果DLL生成無模式對(duì)
12、話框或有自己的主框架窗口,則應(yīng)用程序的主消息泵必須調(diào)用從DLL導(dǎo)出的函數(shù)來調(diào)用 PreTranslateMessage成員函數(shù)。另外,MFC規(guī)則DLL與MFC應(yīng)用程序中一樣,需要將所有DLL中元素的初始化放到Initlnstance成員函數(shù)中。第二組文件自定義對(duì)話框類聲明及實(shí)現(xiàn)(點(diǎn)擊查看附件)分析:這一部分的編程與一般的應(yīng)用程序根本沒有什么不同,我們照樣可以利用MFC類向?qū)碜詣?dòng)為對(duì)話框上的控件添加事件。MFC 類向?qū)д諛訒?huì)生成類似ON_BN_CLICKED(IDC_HELLO_BUTTON, OnH elloButt on)的消息映射宏。第三組文件DLL中的資源文件NO_DEPENDENCI
13、ES/ Microsoft Developer Studio generated include file. / Used by RegularDll.rc/#define IDD_DLL_DIALOG 1000#define IDC_HELLO_BUTTON 1000分析:在MFC規(guī)則DLL中使用資源也與在 MFC應(yīng)用程序中使用資源沒有什么不同,我們照 樣可以用Visual C+的資源編輯工具進(jìn)行資源的添加、刪除和屬性的更改。第四組文件MFC規(guī)則DLL接口函數(shù)#include "StdAfx.h"#include "DllDialog.h"extern
14、 "C" _declspec(dllexport) void ShowDlg(void)CDllDialog dllDialog;第 6 頁(yè)dllDialog.DoModal();分析:這個(gè)接口并不使用 MFC,但是在其中卻可以調(diào)用 MFC擴(kuò)展類CdllDialog的函數(shù),這體 現(xiàn)了“規(guī)則”的概類。與非MFC DLL完全相同,我們可以使用 _declspec(dllexport)聲明或在.def中引出的方式導(dǎo)出MFC規(guī)則DLL中的接口。5.4 MFC規(guī)則DLL的調(diào)用筆者編寫了如圖12的對(duì)話框MFC程序(下載本工程 附件)來調(diào)用5.3節(jié)的MFC規(guī)則DLL,在這個(gè)程序的對(duì)話框上
15、點(diǎn)擊“調(diào)用DLL”按鈕時(shí)彈出5.3節(jié)MFC規(guī)則DLL中的對(duì)話 框。圖12 MFC規(guī)則DLL的調(diào)用例子F面是“調(diào)用DLL ”按鈕單擊事件的消息處理函數(shù):void CRegularDIICallDlg:OnCalldllButton()typedef void (*lpFun)(void);HINSTANCE hDll; /DLL 句柄hDll = LoadLibrary("RegularDll.dll");if (NULL=hDII)MessageBox("DLL 加載失敗");lpFun addFun; / 函數(shù)指針lpFun pShowDlg = (l
16、pFun)GetProcAddress(hDII,"ShowDlg");if (NULL=pShowDlg)MessageBox("DLL中函數(shù)尋找失敗”);pShowDIg();上述例子中給出的是顯示調(diào)用的方式,可以看出,其調(diào)用方式與第4節(jié)中非MFC DLL的調(diào)用方式?jīng)]有什么不同。第8頁(yè)我們照樣可以在 EXE程序中隱式調(diào)用 MFC規(guī)則DLL,只需要將 DLL工程生成的ib文件 和.dll文件拷入當(dāng)前工程所在的目錄, 并在RegularDIICallDIg.cpp文件(圖12所示對(duì)話框類 的實(shí)現(xiàn)文件)的頂部添加:#pragma comment(lib,"
17、RegularDll.lib")void ShowDlg(void);并將 void CRegularDIICallDlg:OnCalldllButton()改為:void CRegularDIICallDlg:OnCalldllButton()ShowDIg();5.5共享 MFC DLL 的規(guī)則 DLL的模塊切換應(yīng)用程序進(jìn)程本身及其調(diào)用的每個(gè)DLL模塊都具有一個(gè)全局唯一的HINSTANCE句柄,它們代表了 DLL或EXE模塊在進(jìn)程虛擬空間中的起始地址。進(jìn)程本身的模塊句柄一般為 0x400000,而DLL模塊的缺省句柄為 0x10000000。如果程序同時(shí)加載了多個(gè)DLL,則每個(gè)D
18、LL模塊都會(huì)有不同的 HINSTANCE。應(yīng)用程序在加載 DLL時(shí)對(duì)其進(jìn)行了重定位。共享MFC DLL (或MFC擴(kuò)展DLL )的規(guī)則 DLL涉及到 HINSTANCE 句柄問題,HINSTANCE句柄對(duì)于加載資源特別重要。EXE和DLL都有其自己的資源,而且這些資源的ID可能重復(fù),應(yīng)用程序需要通過資源模塊的切換來找到正確的資源。如果應(yīng)用程序需要 來自于DLL的資源,就應(yīng)將資源模塊句柄指定為DLL的模塊句柄;如果需要EXE文件中包含的資源,就應(yīng)將資源模塊句柄指定為EXE的模塊句柄。這次我們創(chuàng)建一個(gè)動(dòng)態(tài)鏈接到MFC DLL的規(guī)則DLL (下載本工程附件),在其中包含如圖13的對(duì)話框。圖13 DL
19、L中的對(duì)話框另外,在與這個(gè) DLL相同的工作區(qū)中生成一個(gè)基于對(duì)話框的MFC程序,其對(duì)話框與圖12完全一樣。但是在此工程中我們另外添加了一個(gè)如圖14的對(duì)話框。圖14 EXE中的對(duì)話框圖13和圖14中的對(duì)話框除了 caption不同(以示區(qū)別)以外,其它的都相同。尤其值得特別注意,在 DLL和EXE中我們對(duì)圖13和圖14的對(duì)話框使用了相同的資源第6頁(yè)ID=2000 ,在DLL和EXE工程的resource.h中分別有如下的宏:/DLL中對(duì)話框的ID#define IDD_DLL_DIALOG 2000/EXE中對(duì)話框的ID#define IDD_EXE_DIALOG 2000與5.3節(jié)靜態(tài)鏈接 M
20、FC DLL的規(guī)則DLL相同,我們還是在規(guī)則DLL中定義接口函數(shù)ShowDIg,原型如下:#include "StdAfx.h"#include "SharedDll.h"void ShowDlg(void)CDialog dlg(IDD_DLL_DIALOG); / 打開 ID 為 2000 的對(duì)話框dlg.DoModal();而為應(yīng)用工程主對(duì)話框的“調(diào)用DLL ”的單擊事件添加如下消息處理函數(shù):void CSharedDIICallDlg:OnCalldllButton()ShowDlg();我們以為單擊“調(diào)用 DLL ”會(huì)彈出如圖13所示DLL中的
21、對(duì)話框,可是可怕的事情發(fā)生了,我們看到是圖14所示EXE中的對(duì)話框!驚訝?產(chǎn)生這個(gè)問題的根源在于應(yīng)用程序與MFC規(guī)則DLL共享MFC DLL(或MFC擴(kuò)展DLL)的程序總是默認(rèn)使用 EXE的資源,我們必須進(jìn)行資源模塊句柄的切換,其實(shí)現(xiàn)方法有三:方法一 在DLL接口函數(shù)中使用:AFX_MANAGE_STATE(AfxGetStaticModuleState();我們將DLL中的接口函數(shù) ShowDlg改為:void ShowDlg(void)/方法1:在函數(shù)開始處變更,在函數(shù)結(jié)束時(shí)恢復(fù)/將AFX_MANAGE_STATE(AfxGetStaticModuleState(); 作為接口函數(shù)的第一
22、/條語(yǔ)句進(jìn)行模塊狀態(tài)切換 AFX_MANAGE_STATE(AfxGetStaticModuleState();CDialog dlg(IDD_DLL_DIALOG); 打開 ID 為 2000 的對(duì)話框dlg.DoModal();這次我們?cè)冱c(diǎn)擊 EXE程序中的“調(diào)用 DLL ”按鈕,彈出的是 DLL中的如圖13的對(duì)話 框!嘿嘿,彈出了正確的對(duì)話框資源。AfxGetStaticModuleState 是一個(gè)函數(shù),其原型為:AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState();該函數(shù)的功能是在棧上(這意味著其作用域是局部的)創(chuàng)建一個(gè)AFX_MODU
23、LE_STATE 類(模塊全局?jǐn)?shù)據(jù)也就是模塊狀態(tài))的實(shí)例,對(duì)其進(jìn)行設(shè)置,并將其指針pModuleState返回。AFX_MODULE_STATE 類的原型如下:/ AFX_MODULE_STATE (global data for a module) class AFX_MODULE_STATE : public CNoTrackObject public:#ifdef AFXDLLAFX_MODULE_STATE(BOOL bDLL, WNDPROC pfnAfxWndProc, DWORD dwVersion);AFX_MODULE_STATE(BOOL bDLL, WNDPROC pfn
24、AfxWndProc, DWORD dwVersion,BOOL bSystem); #elseAFX_MODULE_STATE(BOOL bDLL);#endifAFX_MODULE_STATE();CWinApp* m_pCurrentWinApp;HINSTANCE m_hCurrentlnstanceHandle;HINSTANCE m_hCurrentResourceHandle;LPCTSTR m_lpszCurrentAppName;/省略后面的部分AFX MODULE STATE 類利用其構(gòu)造函數(shù)和析構(gòu)函數(shù)進(jìn)行存儲(chǔ)模塊狀態(tài)現(xiàn)場(chǎng)及恢復(fù)現(xiàn) 場(chǎng)的工作,類似匯編中call指令對(duì)pc指針
25、和sp寄存器的保存與恢復(fù)、中斷服務(wù)程序的中斷 現(xiàn)場(chǎng)壓棧與恢復(fù)以及操作系統(tǒng)線程調(diào)度的任務(wù)控制塊保存與恢復(fù)。許多看似不著邊際的知識(shí)點(diǎn)居然有驚人的相似!AFX_MANAGE_STATE 是一個(gè)宏,其原型為:AFX_MANAGE_STATE( AFX_MODULE_STATE* pModuleState )該宏用于將pModuleState設(shè)置為當(dāng)前的有效模塊狀態(tài)。當(dāng)離開該宏的作用域時(shí)(也就 離開了 pModuleState所指向棧上對(duì)象的作用域),先前的模塊狀態(tài)將由 AFX_MODULE_STATE 的析構(gòu)函數(shù)恢復(fù)。方法二 在DLL接口函數(shù)中使用:AfxGetResourceHandle();Afx
26、SetResourceHandle(HINSTANCE xxx);AfxGetResourceHandle用于獲取當(dāng)前資源模塊句柄,而AfxSetResourceHandle則用于設(shè)置程序目前要使用的資源模塊句柄。我們將DLL中的接口函數(shù) ShowDlg改為:void ShowDlg(void)/方法2的狀態(tài)變更HINSTANCE save_hlnstance = AfxGetResourceHandle();AfxSetResourceHandle(theApp.m_hlnstance);CDialog dlg(IDD_DLL_DIALOG); 打開 ID 為 2000 的對(duì)話框dlg.Do
27、Modal();/方法2的狀態(tài)還原AfxSetResourceHandle(save_hInstance);通過AfxGetResourceHandle和AfxSetResourceHandle的合理變更,我們能夠靈活地設(shè)置 程序的資源模塊句柄,而方法一則只能在DLL接口函數(shù)退出的時(shí)候才會(huì)恢復(fù)模塊句柄。方法二則不同,如果將 ShowDlg改為:extern CSharedDllApp theApp; / 需要聲明 theApp 外部全局變量void ShowDlg(void)/方法2的狀態(tài)變更HINSTANCE save_hlnstance = AfxGetResourceHandle();AfxSetResourceHandle(theApp.m_hlnstance);CDialog dlg(IDD_DLL_DIALOG); 打開 ID 為 2000 的對(duì)話框 dlg.DoModal();/方法2的狀態(tài)還原AfxSetResourceHandle(save_hlnstance);/使用方法2后在此處再進(jìn)行操作針對(duì)的將是應(yīng)用程序的資源CDialog dlg1(IDD_DLL_DIALOG); / 打開 ID 為 2000 的對(duì)話框 dlg1.DoModal();在應(yīng)用程序主對(duì)話框的“調(diào)用DLL ”按鈕上點(diǎn)擊,將看到兩個(gè)對(duì)話框,相繼為DLL中的對(duì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年水稻種植戶農(nóng)產(chǎn)品電商渠道拓展合同3篇
- 二零二五年度砼結(jié)構(gòu)工程維護(hù)與保養(yǎng)合同2篇
- 2024-2025學(xué)年高中歷史第二單元生產(chǎn)工具與勞作方式第4課古代的生產(chǎn)工具與勞作同步課時(shí)作業(yè)含解析新人教版選擇性必修2
- 2025年度物業(yè)費(fèi)征收與業(yè)主滿意度調(diào)查合同3篇
- 2025年度煤炭運(yùn)輸保險(xiǎn)與購(gòu)銷合同
- 臨時(shí)人員租賃合同(2024版)
- 2024版融資租賃是擔(dān)保合同范本
- 2024版肖像權(quán)使用合同書
- 二零二五版辦公家具翻新與維修服務(wù)合同模板3篇
- 2025版房屋租賃合同臺(tái)賬數(shù)字化監(jiān)管與合規(guī)審查合同2篇
- 高標(biāo)準(zhǔn)基本農(nóng)田建設(shè)規(guī)范培訓(xùn)課件
- 血液凈化十大安全目標(biāo)課件
- 鼻竇負(fù)壓置換療課件
- 國(guó)際森林日森林防火教育宣傳主題班會(huì)PPT模板
- 藥廠質(zhì)量管理部QA人員崗位設(shè)置表
- 劍橋國(guó)際少兒英語(yǔ)“第三級(jí)”單詞默寫表
- (精心整理)高中生物必修二非選擇題專題訓(xùn)練
- 小學(xué)二年級(jí)100以內(nèi)進(jìn)退位加減法混合運(yùn)算
- 福建省流動(dòng)人口信息登記表
- 市委組織部副部長(zhǎng)任職表態(tài)發(fā)言
- HXD1D客運(yùn)電力機(jī)車轉(zhuǎn)向架培訓(xùn)教材
評(píng)論
0/150
提交評(píng)論