2013-02-07 69 views
0

我試圖通過串行端口連接讀取信息。我試圖使用超級終端發送字符或字符串到我的程序。代碼生成良好,並將調試,直到它到達我正在使用的ReadFile函數。一旦啓動該功能,它就會等待發送信息。一旦我輸入4個字符,我就會收到標題中說明的未處理的異常。斷點使我在AfxWinMain和hPrevInstance中無法評估CXX0030表達式。我可以使用我的程序將數據發送到超級終端,但無論出於何種原因它都會與readfile崩潰。0x76b1dd74未處理的異常。訪問衝突寫入位置0x00000000

凡功能被稱爲

void CThermotronDlg::OnBnClickedDelete() 
{ 
Serial Port; 
CString Temp("34"); 
bool ans; 
int nItem = MyListEx.GetSelectionMark(); 



ans = Port.ReadPort(Temp); 

} 

功能

bool Serial::ReadPort(CString buf){ 

OpenPort(); 
LPCTSTR dope; 


LPDWORD bytesRead =0; 
char b[4]; 
BOOL ret = ReadFile(sSerial,b,4,bytesRead,NULL) ; 


dope = reinterpret_cast<LPCTSTR>(b); 
AfxMessageBox(dope,0,0); 
return true; 


} 
+0

向我們展示您的代碼中打開文件的部分。你檢查它是否正確打開? – KBart

回答

5
DWORD bytesRead; 
char b[4]; 
BOOL ret = ReadFile(sSerial,b,4,&bytesRead,NULL) ; 

4個參數必須是接收讀取的實際字節數有效的指針。它不能爲NULL。更確切地說:只有當lpOverlapped參數不是NULL時,此參數纔可以爲NULL。

+0

謝謝,完全有效。我還有另外一個問題,現在緩衝區'b'沒有像我想的那樣被轉換爲可讀的LPCTSTR。我的重新演繹演員有什麼問題嗎?因爲我收到中文符號。 – user1704863

+2

LPCTSTR是一個指向空終止字符串的指針。您緩衝區b包含最多4個字符而不包含終止空字符,長度由bytesRead確定。在處理讀取字節時,您應該考慮bytesRead。如果你只想快速調試黑客,那麼使b一個char變大,仍然是ReadFile(,, 4 ,,),然後b [bytesRead] ='\ 0'。之後,b是一個以空字符結尾的字符串,您可以將其轉換爲LPCTSTR。 –

相關問題