全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1864
推到 Plurk!
推到 Facebook!

參考一篇文章後寫出的程式有問題(vc++)II

尚未結案
radpone
一般會員


發表:3
回覆:0
積分:0
註冊:2004-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-10 21:11:11 IP:211.76.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-11 08:51:50 IP:220.130.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-05 17:19:38 IP:61.218.xxx.xxx 未訂閱
我想請問WIN API有什麼function可偵測現在的COM PORT狀態...打開/關閉?Thanks
系統時間:2024-05-09 16:08:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!