我的編譯沒有問題,運行時報錯,這是錯誤報告(RS232串口通訊,打開串口時報錯)
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00401c72 in module 'Project.exe'.Read of address 00000218'. Process stopped,Use Step or Run to continue.
怎么回事啊,求大神指點
這是錯誤的句子
Temp = "COM"+IntToStr(rdCOM->ItemIndex+1);
uj5u.com熱心網友回復:
ShowMessage(Temp)看看Temp對否?uj5u.com熱心網友回復:
ShowMessage (Temp)什么意思?是要改函式嗎?uj5u.com熱心網友回復:
顯示Temp字串看是不是你想要的。
uj5u.com熱心網友回復:
彈出一個界面是空的,然后還是報錯
uj5u.com熱心網友回復:
Temp = "COM"+IntToStr(rdCOM->ItemIndex+1);ShowMessage(Temp);
顯示為空嗎?
Temp定義是不是:
AnsiString Temp;
uj5u.com熱心網友回復:
Temp = "COM"+IntToStr(rdCOM->ItemIndex+1);
ShowMessage(Temp);
顯示為空嗎?
Temp定義是不是:
AnsiString Temp;
不是啊,這是部分源代碼
char *ComNo;
DCB dcb;
String Temp;
//取得要打開的通信埠
Temp = "COM"+IntToStr(rdCOM->ItemIndex+1);
ShowMessage(Temp);
//轉換至指標型別Char
ComNo = Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,0,NULL,
OPEN_EXISTING,0,0);
if (hComm == INVALID_HANDLE_VALUE)
{
MessageBox(0,"打開通信埠錯誤!!","Comm Error",MB_OK);
return;
}
這個是按鈕的函式,點擊是執行,但是點擊按鈕以后就直接彈出地址錯誤視窗,根本就沒用啊
uj5u.com熱心網友回復:
ShowMessage(Temp);顯示為空嗎?
你的CB是什么版本的?
如果是2009以上版本,試試把:
String Temp;
改為:
AnsiString Temp;
ComNo = Temp.c_str();
這句有錯,改為
char ComNo[20];
strcpy(ComNo,Temp.c_str());
可查看Help關于AnsiString類的c_str()成員函式有說明。
uj5u.com熱心網友回復:
char *ComNo;
……
String Temp;
//取得要打開的通信埠
Temp = "COM"+IntToStr(rdCOM->ItemIndex+1);
……
//轉換至指標型別Char
ComNo = Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,0,NULL,
OPEN_EXISTING,0,0);
if (hComm == INVALID_HANDLE_VALUE)
{
MessageBox(0,"打開通信埠錯誤!!","Comm Error",MB_OK);
return;
}
這個是按鈕的函式,點擊是執行,但是點擊按鈕以后就直接彈出地址錯誤視窗,根本就沒用啊
我敢說問題十有八九處在哪個ComNo上!位置定在“ComNo=Temp.c_str()”這一句。具體來講,CreateFile函式需要的ComNo引數,不是你用String型別轉換一下就能轉成的串口號。
我建議你做個列舉陣列或者別的方式,來傳遞CreatFile函式需要的串口序號引數。
uj5u.com熱心網友回復:
rdCOM是什么控制元件的Name?uj5u.com熱心網友回復:
樓主,建議你直接指定一下你的串口號試一試,去掉ComNo的賦值、轉換程序。比如你的串口是COM1,建議你的CreatFile函式直接寫成:CreateFile(COM1,GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,0,0);
如果這么寫沒問題,則可斷定我的說法正確。
uj5u.com熱心網友回復:
ShowMessage(Temp);
顯示為空嗎?
你的CB是什么版本的?
如果是2009以上版本,試試把:
String Temp;
改為:
AnsiString Temp;
ComNo = Temp.c_str();
這句有錯,改為
char ComNo[20];
strcpy(ComNo,Temp.c_str());
可查看Help關于AnsiString類的c_str()成員函式有說明。
我試了一下,并沒有用,我單步除錯,程式執行到
Temp = "COM"+IntToStr(rdCOM->ItemIndex+1);這句就錯了,跟后面資料型別轉換沒啥關系,這句到底咋回事
uj5u.com熱心網友回復:
rdCOM是什么控制元件的Name,ListBox還是ComboBox還是?這個控制元件里的Items是哪些?
你有沒有在這個控制元件中選擇一項?或者用代碼指定一項?
uj5u.com熱心網友回復:
實在不行,先繞過去試試,比如你用COM1就寫:Temp = "COM1";
用COM2就寫:
Temp = "COM2";
其它照我前面回復的試試。
uj5u.com熱心網友回復:
樓主我也遇到類似問題。不過是從一開始就彈出錯誤資訊。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/62976.html
標籤:基礎類
