




已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
最近因為工作的關系 要學習串口編程 在網(wǎng)上無意中發(fā)現(xiàn)了 PJ Naughter 寫的一個串口類 不知是 何許人 孤陋寡聞 甚覺汗顏 感覺還可以 就抽了點時間把他網(wǎng)站上的有關此類的信息翻譯了下 有時間研究下 說不定能用到項目中 時間較為倉促 加上我也不想在咬文嚼字上較真 肯定有許 多不足 望大家指正 同時也希望對串口有研究的同志們不吝賜教 一 類源文件 1 SERIALPORT H Module SERIALPORT H Purpose Declaration for an MFC wrapper class for serial ports Created PJN 31 05 1999 History None Copyright c 1999 by PJ Naughter All rights reserved Macros Structs etc ifndef SERIALPORT H define SERIALPORT H Classes Serial port exception class void AfxThrowSerialException DWORD dwError 0 class CSerialException public CException public Constructors Destructors CSerialException DWORD dwError CSerialException Methods ifdef DEBUG virtual void Dump CDumpContext endif virtual BOOL GetErrorMessage LPTSTR lpstrError UINT nMaxError PUINT pnHelpContext NULL CString GetErrorMessage 2 Data members DWORD m dwError protected DECLARE DYNAMIC CSerialException The actual serial port class class CSerialPort public CObject public Enums enum FlowControl NoFlowControl CtsRtsFlowControl CtsDtrFlowControl DsrRtsFlowControl DsrDtrFlowControl XonXoffFlowControl enum Parity EvenParity MarkParity NoParity OddParity SpaceParity enum StopBits OneStopBit OnePointFiveStopBits TwoStopBits Constructors Destructors CSerialPort CSerialPort General Methods void Open int nPort DWORD dwBaud 9600 Parity parity NoParity BYTE DataBits 8 StopBits stopbits OneStopBit FlowControl fc NoFlowControl BOOL bOverlapped 3 FALSE void Close void Attach HANDLE hComm HANDLE Detach operator HANDLE const return m hComm BOOL IsOpen const return m hComm INVALID HANDLE VALUE ifdef DEBUG void CSerialPort Dump CDumpContext endif Reading Writing Methods DWORD Read void lpBuf DWORD dwCount BOOL Read void lpBuf DWORD dwCount OVERLAPPED void ReadEx void lpBuf DWORD dwCount DWORD Write const void lpBuf DWORD dwCount BOOL Write const void lpBuf DWORD dwCount OVERLAPPED void WriteEx const void lpBuf DWORD dwCount void TransmitChar char cChar void GetOverlappedResult OVERLAPPED void CancelIo Configuration Methods void GetConfig COMMCONFIG static void GetDefaultConfig int nPort COMMCONFIG void SetConfig COMMCONFIG static void SetDefaultConfig int nPort COMMCONFIG Misc RS232 Methods void ClearBreak void SetBreak void ClearError DWORD void GetStatus COMSTAT void GetState DCB void SetState DCB void Escape DWORD dwFunc void ClearDTR void ClearRTS void SetDTR void SetRTS void SetXOFF void SetXON void GetProperties COMMPROP void GetModemStatus DWORD 4 Timeouts void SetTimeouts COMMTIMEOUTS void GetTimeouts COMMTIMEOUTS void Set0Timeout void Set0WriteTimeout void Set0ReadTimeout Event Methods void SetMask DWORD dwMask void GetMask DWORD void WaitEvent DWORD void WaitEvent DWORD Queue Methods void Flush void Purge DWORD dwFlags void TerminateOutstandingWrites void TerminateOutstandingReads void ClearWriteBuffer void ClearReadBuffer void Setup DWORD dwInQueue DWORD dwOutQueue Overridables virtual void OnCompletion DWORD dwErrorCode DWORD dwCount LPOVERLAPPED lpOverlapped protected HANDLE m hComm Handle to the comms port BOOL m bOverlapped Is the port open in overlapped IO static void WINAPI OnCompletion DWORD dwErrorCode DWORD dwCount LPOVERLAPPED lpOverlapped DECLARE DYNAMIC CSerialPort endif SERIALPORT H 2 Module SERIALPORT CPP Purpose Implementation for an MFC wrapper class for serial ports Created PJN 31 05 1999 History PJN 03 06 1999 1 Fixed problem with code using CancelIo which does not exist on 95 2 Fixed leaks which can occur in sample app when an exception is thrown PJN 16 06 1999 1 Fixed a bug whereby CString ReleaseBuffer was not being called in 5 CSerialException GetErrorMessage PJN 29 09 1999 1 Fixed a simple copy and paste bug in CSerialPort SetDTR Copyright c 1999 by PJ Naughter All rights reserved Includes include stdafx h include serialport h include winerror h defines ifdef DEBUG define new DEBUG NEW undef THIS FILE static char THIS FILE FILE endif Implementation Class which handles CancelIo function which must be constructed at run time since it is not imeplemented on NT 3 51 or Windows 95 To avoid the loader bringing up a message such as Failed to load due to missing export the function is constructed using GetProcAddress The CSerialPort CancelIo function then checks to see if the function pointer is NULL and if it is it throws an exception using the error code ERROR CALL NOT IMPLEMENTED which is what 95 would have done if it had implemented a stub for it in the first place class SERIAL PORT DATA public Constructors Destructors SERIAL PORT DATA SERIAL PORT DATA HINSTANCE m hKernel32 typedef BOOL CANCELIO HANDLE typedef CANCELIO LPCANCELIO 6 LPCANCELIO m lpfnCancelIo SERIAL PORT DATA SERIAL PORT DATA m hKernel32 LoadLibrary T KERNEL32 DLL VERIFY m hKernel32 NULL m lpfnCancelIo LPCANCELIO GetProcAddress m hKernel32 CancelIo SERIAL PORT DATA SERIAL PORT DATA FreeLibrary m hKernel32 m hKernel32 NULL The local variable which handle the function pointers SERIAL PORT DATA SerialPortData Exception handling code void AfxThrowSerialException DWORD dwError 0 if dwError 0 dwError GetLastError CSerialException pException new CSerialException dwError TRACE T Warning throwing CSerialException for error d n dwError THROW pException BOOL CSerialException GetErrorMessage LPTSTR pstrError UINT nMaxError PUINT pnHelpContext ASSERT pstrError NULL if pnHelpContext NULL pnHelpContext 0 LPTSTR lpBuffer BOOL bRet FormatMessage FORMAT MESSAGE ALLOCATE BUFFER FORMAT MESSAGE FROM SYSTEM NULL m dwError MAKELANGID LANG NEUTRAL 7 SUBLANG SYS DEFAULT LPTSTR if bRet FALSE pstrError 0 else lstrcpyn pstrError lpBuffer nMaxError bRet TRUE LocalFree lpBuffer return bRet CString CSerialException GetErrorMessage CString rVal LPTSTR pstrError rVal GetBuffer 4096 GetErrorMessage pstrError 4096 NULL rVal ReleaseBuffer return rVal CSerialException CSerialException DWORD dwError m dwError dwError CSerialException CSerialException IMPLEMENT DYNAMIC CSerialException CException ifdef DEBUG void CSerialException Dump CDumpContext dc m dwError m dwError endif The actual serial port code 8 CSerialPort CSerialPort m hComm INVALID HANDLE VALUE m bOverlapped FALSE CSerialPort CSerialPort Close IMPLEMENT DYNAMIC CSerialPort CObject ifdef DEBUG void CSerialPort Dump CDumpContext dc T m hComm m hComm T n dc T m bOverlapped 0 ASSERT pSerialPort IsKindOf RUNTIME CLASS CSerialPort Call the C function pSerialPort OnCompletion dwErrorCode dwCount lpOverlapped void CSerialPort OnCompletion DWORD dwErrorCode DWORD dwCount LPOVERLAPPED lpOverlapped Just free up the memory which was previously allocated for the OVERLAPPED structure delete lpOverlapped Your derived classes can do something useful in OnCompletion but don t forget to call CSerialPort OnCompletion to ensure the memory is freed up void CSerialPort CancelIo ASSERT IsOpen 14 if SerialPortData m lpfnCancelIo NULL TRACE T CancelIo function is not supported on this OS You need to be running at least NT 4 or Win 98 to use this function n AfxThrowSerialException ERROR CALL NOT IMPLEMENTED if SerialPortData m lpfnCancelIo m hComm TRACE T Failed in call to CancelIO n AfxThrowSerialException void CSerialPort WriteEx const void lpBuf DWORD dwCount ASSERT IsOpen OVERLAPPED pOverlapped new OVERLAPPED ZeroMemory pOverlapped sizeof OVERLAPPED pOverlapped hEvent HANDLE this if WriteFileEx m hComm lpBuf dwCount pOverlapped OnCompletion delete pOverlapped TRACE T Failed in call to WriteFileEx n AfxThrowSerialException void CSerialPort ReadEx void lpBuf DWORD dwCount ASSERT IsOpen OVERLAPPED pOverlapped new OVERLAPPED ZeroMemory pOverlapped sizeof OVERLAPPED pOverlapped hEvent HANDLE this if ReadFileEx m hComm lpBuf dwCount pOverlapped OnCompletion delete pOverlapped TRACE T Failed in call to ReadFileEx n AfxThrowSerialException void CSerialPort TransmitChar char cChar ASSERT IsOpen 15 if TransmitCommChar m hComm cChar TRACE T Failed in call to TransmitCommChar n AfxThrowSerialException void CSerialPort GetConfig COMMCONFIG DWORD dwSize sizeof COMMCONFIG if GetCommConfig m hComm AfxThrowSerialException void CSerialPort SetConfig COMMCONFIG DWORD dwSize sizeof COMMCONFIG if SetCommConfig m hComm AfxThrowSerialException void CSerialPort SetBreak ASSERT IsOpen if SetCommBreak m hComm TRACE T Failed in call to SetCommBreak n AfxThrowSerialException void CSerialPort ClearBreak ASSERT IsOpen if ClearCommBreak m hComm 16 TRACE T Failed in call to SetCommBreak n AfxThrowSerialException void CSerialPort ClearError DWORD if ClearCommError m hComm AfxThrowSerialException void CSerialPort GetDefaultConfig int nPort COMMCONFIG 23 pEx Delete 其 API 包含兩個類 CSerialException and CSerialPort 它們有如下成員函數(shù)和變量 CSerialException CSerialException CSerialException GetErrorMessage CSerialException m dwError CSerialPort CSerialPort CSerialPort CSerialPort CSerialPort Open CSerialPort Close CSerialPort Attach CSerialPort Detach CSerialPort operator HANDLE CSerialPort IsOpen CSerialPort Dump CSerialPort Read CSerialPort ReadEx CSerialPort Write CSerialPort WriteEx CSerialPort TransmitChar CSerialPort GetOverlappedResult CSerialPort CancelIo CSerialPort GetConfig CSerialPort GetDefaultConfig CSerialPort SetConfig CSerialPort SetDefaultConfig CSerialPort ClearBreak CSerialPort SetBreak CSerialPort ClearError CSerialPort GetStatus CSerialPort GetState CSerialPort SetState CSerialPort Escape CSerialPort ClearDTR CSerialPort ClearRTS CSerialPort SetDTR CSerialPort SetRTS CSerialPort SetXOFF CSerialPort SetXON CSerialPort GetProperties CSerialPort GetModemStatus CSerialPort SetTimeouts CSerialPort GetTimeouts 24 CSerialPort Set0Timeout CSerialPort Set0WriteTimeout CSerialPort Set0ReadTimeout CSerialPort SetMask CSerialPort GetMask CSerialPort WaitEvent CSerialPort Flush CSerialPort Purge CSerialPort TerminateOutstandingWrites CSerialPort TerminateOutstandingReads CSerialPort ClearWriteBuffer CSerialPort ClearReadBuffer CSerialPort Setup CSerialPort OnCompletion CSerialException CSerialException CSerialException DWORD dwError 0 參數(shù) dwError 導致異常的錯誤 注釋 當創(chuàng)建一個 CSerialException 對象時 此成員函數(shù)被調用 拋出 CSerialException 異常 調用全 局 函數(shù) AfxThrowSerialException 如果你調用時使用 dwError 的默認值 那么他會在內部為你調用 GetLastError CSerialException GetErrorMessage virtual BOOL GetErrorMessage LPTSTR lpszError UINT nMaxError PUINT pnHelpContext NULL CString GetErrorMessage 返回值 1 如果函數(shù)調用成功 返回非 0 值 如果沒有有效錯誤信息 返回 0 2 一個 CString 標識的錯誤 參數(shù) 25 lpszError 一個指向接受錯誤信息的緩沖區(qū) nMaxError 緩沖區(qū)能夠包含的最大字符數(shù) 包括 NULL 終止符 pnHelpContext 一個 UINT 地址 將接受 help context ID 如果為空 則沒有 ID 會返回 注釋 調用此函數(shù) 可以獲得一個有關發(fā)生錯誤的文本 CSerialException m dwError 注釋 導致異常的錯誤 此錯誤值是一個系統(tǒng)錯誤代碼 同 WINERROR H 中一樣 可參考更多細節(jié)請參 考 Win32 SDK 文檔中錯誤代碼 CSerialPort CSerialPort CSerialPort 注釋 標準 C 類構造函數(shù) 在其內部 僅僅只是給成員變量一個默認值 CSerialPort CSerialPort CSerialPort 注釋 標準類析構函數(shù) 它確保打開的串行端口被關閉 CSerialException Open void Open int nPort DWORD dwBaud 9600 Parity parity NoParity BYTE DataBits 8 StopBits stopbits OneStopBit FlowControl fc NoFlowControl BOOL bOverlapped FALSE throw CSerialException 參數(shù) nPort 要打開的通訊端口 dwBaud 要是用的波特率 parity 要是用的校驗方式 其值是一個枚舉 26 enum Parity EvenParity MarkParity NoParity OddParity SpaceParity Databits The number of data bits to use stopbits 要使用的停止位 其值是一個枚舉 enum StopBits OneStopBit OnePointFiveStopBits TwoStopBits fc 要使用的流控制方法 其值是一個枚舉 enum FlowControl NoFlowControl CtsRtsFlowControl CtsDtrFlowControl DsrRtsFlowControl DsrDtrFlowControl XonXoffFlowControl bOverlapped 如果使用重疊方式 值為 TRUE 否則使用阻塞方式 值為 FALSE 注釋 調用此成員函數(shù)打開一個通訊端口 在類內部將會使用 CreateFile 打開一個串行端口 處理串口數(shù)目大于 9 的情況 并且使用 SetState 來設置可變的 RS 232 設置 如果發(fā)生 錯誤 將會拋出異常 CSerialPort Close Close 注釋 同 Open 函數(shù)對應 只是用來關閉打開的串行端口 CSerialPort Attach void Attach HANDLE hComm 參數(shù) 27 hComm 打開串行端口的 SDK 句柄 注釋 允許你給一個 CSerialPort 實例附加一個存在的 SDK 串行端口句柄 這個函數(shù)同 MFC 中的 CWnd Attach function 類似 CSerialPort Detach HANDLE Detach 返回值 SDK 串行端口 HANDLE 注釋 與 Attach 相對應 這個函數(shù)同 MFC 中的 CWnd Detach 類似 CSerialPort operator HANDLE operator HANDLE 返回值 SDK 串行端口 HANDLE 注釋 使用操作符獲取底層串行端口句柄 利用句柄 你可以直接調用 Windows APIs CSerialPort IsOpen BOOL IsOpen const 返回值 如果串口打開 返回 TRUE 否則 FALSE CSerialPort Dump void Dump CDumpContext 28 BOOL Read void lpBuf DWORD dwCount OVERLAPPED void ReadEx void lpBuf DWORD dwCount throw CSerialException 返回值 已讀取字節(jié)數(shù) 如果重疊讀取同步的完成 返回幀 如果操作被異步完成 返回假 參數(shù) lpBuf 指向存放從串口讀取字符緩沖區(qū) dwCount 從串口讀取的字節(jié)數(shù) overlapped 對應一個 OVERLAPPED 結構體 如果端口是以重疊方式打開 這是必須的 注釋 這三個函數(shù)是對 SDK ReadFile 和 ReadFileEx 的封裝 Read 的第二版是重疊方式 CSerialPort Write WriteEx DWORD Write const void lpBuf DWORD dwCount BOOL Write const void lpBuf DWORD dwCount OVERLAPPED void WriteEx const void lpBuf DWORD dwCount throw CSerialException 返回值 已寫的字節(jié)數(shù) 如果重疊寫是同步的完成 返回真 如果操作被異步完成 返回假 參數(shù) lpBuf 指向存放寫向串口字符的緩沖區(qū) dwCount 寫向串口的字節(jié)數(shù) overlapped 對應一個 OVERLAPPED 結構體 如果端口是以重疊方式打開 這是必須的 注釋 這三個函數(shù)是對 SDK WriteFile 和 WriteFileEx 的封裝 Write 的第二版是重疊方式 CSerialPort TransmitChar void TransmitChar char cChar const throw CSerialException 注釋 29 對 TransmitCommChar SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文 檔 文檔 CSerialPort GetOverlappedResult void GetOverlappedResult OVERLAPPED 注釋 是對 GetOverlappedResult SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文檔 文檔 CSerialPort CancelIo void CancelIo throw CSerialException 注釋 是對 CancelIo SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文檔 文檔 請注意這個函數(shù)只在 NT 4 Windows 98 或更新版本上有效 在 CSerialPort 1 0 里 存在問 題 在 V1 01 以后的版本里 已經(jīng)被糾正 CSerialPort GetConfig void GetConfig COMMCONFIG 注釋 是對 GetCommConfig SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort GetDefaultConfig static void GetDefaultConfig int nPort COMMCONFIG 注釋 是對 GetDefaultCommConfig SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文檔 30 CSerialPort SetConfig void SetConfig COMMCONFIG 注釋 是對 SetCommConfig SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort SetDefaultConfig static void SetDefaultConfig int nPort COMMCONFIG 注釋 是對 SetDefaultCommConfig SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort ClearBreak void ClearBreak throw CSerialException 注釋 是對 ClearCommBreak SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文 檔 CSerialPort SetBreak void SetBreak throw CSerialException 注釋 是對 SetCommBreak SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort ClearError void ClearError DWORD 注釋 是對 ClearCommError SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 更多細節(jié)請參考 Win32 SDK 文 檔 31 CSerialPort GetStatus void GetStatus COMMSTAT 注釋 是對 GetCommStatus SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort GetState void GetState DCB 注釋 是對 GetCommState SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort SetState void SetState DCB 注釋 Simple 是對 SetCommStateSDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort Escape void Escape DWORD dwFunc throw CSerialException 注釋 是對 EscapeCommFunction SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort ClearDTR void ClearDTR throw CSerialException 注釋 使用常量 CLRDTR 調用 Escape 函數(shù)清除 DTR 32 CSerialPort ClearRTS void ClearRTS throw CSerialException 注釋 使用常量 CLRRTS 調用 Escape 函數(shù)清除 RTS CSerialPort SetDTR void SetDTR throw CSerialException 注釋 使用常量 SETDTR 調用 Escape 函數(shù)設置 DTR CSerialPort SetRTS void SetRTS throw CSerialException 注釋 使用常量 SETRTS 調用 Escape 函數(shù)設置 RTS CSerialPort SetXOFF void SetXOFF throw CSerialException 注釋 當一個 XOFF 接受時 使用常量 SETXOFF 調用 Escape 函數(shù) 導致傳輸發(fā)生 CSerialPort SetXON void SetXON throw CSerialException 注釋 當一個 XON 接受時 使用常量 SETXON 調用 Escape 函數(shù) 導致傳輸發(fā)生 33 CSerialPort GetProperties void GetProperties COMMPROP 注釋 Simple 是對 SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort GetModemStatus void GetModemStatus DWORD 注釋 是對 SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort SetTimeouts void SetTimeouts COMMTIMEOUTS 注釋 是對 SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort GetTimeouts void GetTimeouts COMMTIMEOUTS 注釋 是對 SDK 函數(shù)的簡單封裝 更多細節(jié)請參考 Win32 SDK 文檔 CSerialPort Set0Timeout void Set0Timeout throw CSerialException 注釋 發(fā)送和接受超時配置為 0 這會導致寫立即返回 讀立即返回 無論什么數(shù)據(jù)在接受緩沖區(qū) 而不 等待特定數(shù)目的字節(jié)數(shù)到達 34 CSerialPort Set0WriteTimeout void Set0WriteTimeout throw CSerialException 注釋 發(fā)送超時配置為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學五一特色活動方案
- 大班建構街道活動方案
- 大學游玩活動策劃方案
- 大型書法活動方案
- 大放送精彩活動方案
- 夏天扶貧活動方案
- 大班防震減災活動方案
- 大學美育比賽活動方案
- 夏季親子手工活動方案
- 大型走秀活動方案
- 2025年內蒙古地礦集團直屬子公司招聘筆試參考題庫含答案解析
- 心臟瓣膜病護理常規(guī)課件
- 高校課堂教學創(chuàng)新大賽一等獎課件:混合教學模式創(chuàng)新實踐
- 卵巢交界性腫瘤診治進展
- 持續(xù)葡萄糖監(jiān)測臨床應用專家共識2024解讀
- 《冠心病的規(guī)范化診》課件
- 《數(shù)據(jù)挖掘與機器學習》 課件7.2.1 K-Means聚類
- 2025年圍產(chǎn)期保健工作計劃
- 2024年基本公共衛(wèi)生服務人員培訓計劃
- 邊坡掛網(wǎng)噴漿應急響應方案
- 浙大城市學院《操作系統(tǒng)原理》2021-2022學年第一學期期末試卷
評論
0/150
提交評論