參考一篇文章後寫出的程式有問題(vc++)II |
尚未結案
|
radpone
一般會員 發表:3 回覆:0 積分:0 註冊:2004-06-03 發送簡訊給我 |
http://finetech.myweb.hinet.net/TecDoc/Doc2/AcceRS232.htm
參考上面的文章後
小弟寫了一個程式!(程度不高)
是想在按了一個鈕後從rs232讀取一個資料 void CAutentoDlg::OnButton2()
{ HANDLE handle;
DCB dcb; COMMTIMEOUTS TimeOut;
TimeOut.ReadIntervalTimeout = 0;
TimeOut.ReadTotalTimeoutMultiplier = 0;
TimeOut.ReadTotalTimeoutConstant = 500; //(總讀取 time out 時間 = 0.5 秒)
TimeOut.WriteTotalTimeoutMultiplier = 0;
TimeOut.WriteTotalTimeoutConstant = 500; //(總寫入 time out 時間 = 0.5 秒) BuildCommDCB("9600,n,8,1",&dcb); handle=CreateFile("Com2",
GENERIC_READ,
0,
0,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0); SetCommState(handle,&dcb); SetupComm(handle,1024,1024); SetCommTimeouts(handle,&TimeOut); char lpBuf; DWORD dwRead; ReadFile(handle, &lpBuf, 1, &dwRead, NULL);
if (dwRead == 0)
{ }
else
{CString str;
str=lpBuf; CListBox *lbx ;
lbx = (CListBox*)GetDlgItem(IDC_LIST1);
lbx ->AddString(str);
} } 編譯後沒問題!!可是執行後我按下我指定的鈕後跳出視窗說有問題
裡面的我看不懂!! AUTENTO caused an invalid page fault in
module KERNEL32.DLL at 0197:bffa7c6a.
Registers:
EAX=0064f520 CS=0197 EIP=bffa7c6a EFLGS=00010246
EBX=0064f92c SS=019f ESP=0064f4c0 EBP=0064f538
ECX=0064f5dc DS=019f ESI=0064f520 FS=4e47
EDX=00000000 ES=019f EDI=004152b5 GS=0000
Bytes at CS:EIP:
c6 47 ff 00 ff 36 e8 73 83 fd ff 85 c0 74 3a 89
Stack dump:
0064f5dc 00000000 0064f970 bffa71ba 0064f520 0064f600 0064f56c 0064f970 0064f4fc 5f42c8cb 0064f5ac 00000000 00000000 0064f800 00000000 5f491875 請幫幫我 抓Beg謝謝!! http://home.pchome.com.tw/service/radpone/autento.exe
http://home.pchome.com.tw/service/radpone/autento.cpp
覆上這個檔 執行後按傳送問題就會出現!!
用偵錯去看~~看得出是那裡有問題嗎!!!!!
謝謝!! 發表人 - radpone 於 2004/06/10 21:14:06 發表人 - radpone 於 2004/06/10 21:18:37
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
I used BCB coding an example.
void __fastcall TForm1::OnCreate(TObject *Sender) { HANDLE hNewComm; String strCom; char *ComNo; DCB dcb; strCom = "COM1"; hNewComm = CreateFile(strCom.c_str(),GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL); if (hNewComm == INVALID_HANDLE_VALUE) { //ShowMessage("通訊埠無法開啟"); return; } if (!SetupComm(hNewComm,4096,4096)) { //ShowMessage("設定通訊埠緩衝區有誤"); return; } hComm = hNewComm; PurgeComm(hComm,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR |PURGE_RXCLEAR); GetCommState(hComm,&dcb); dcb.BaudRate = FBaudRate; dcb.fBinary = 1; dcb.Parity = NOPARITY; dcb.ByteSize = 8; dcb.StopBits = ONESTOPBIT; SetCommState(hComm,&dcb); FPortOpen=true; CommTimer->Enabled = true; } void __fastcll CommTimer::OnTimmer() { String Tmp; char inbuff[1024]; DWORD nBytesRead,dwError; COMSTAT CS; ClearCommError(hComm,&dwError,&CS); if (CS.cbInQue > sizeof(inbuff)) { PurgeComm(hComm,PURGE_RXCLEAR); return; } ReadFile(hComm,inbuff,CS.cbInQue,&nBytesRead,NULL); if (nBytesRead > 0 ) { //write code } } |
swordsman
一般會員 發表:8 回覆:22 積分:6 註冊:2003-03-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |