0x76b1dd74处的未处理异常.访问冲突写入位置0x00000000

use*_*863 0 c++ com mfc dialog exception

我试图通过串口连接读取信息.我正在尝试使用HyperTerminal向我的程序发送一个字符或字符串.代码构建正常并将调试,直到它到达我正在使用的ReadFile函数.一旦启动该功能,它将等待发送信息.一旦我输入4个字符,我就会收到标题中所述的未处理的异常.断点使我无法评估afxWinMain和hPrevInstance CXX0030表达式.我能够使用我的程序将数据发送到超级终端,但无论出于何种原因,它都会与readfile崩溃.

调用函数的位置

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



ans = Port.ReadPort(Temp);

}
Run Code Online (Sandbox Code Playgroud)

功能

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;


}
Run Code Online (Sandbox Code Playgroud)

Ale*_*x F 6

DWORD bytesRead;
char b[4];
BOOL ret = ReadFile(sSerial,b,4,&bytesRead,NULL) ;
Run Code Online (Sandbox Code Playgroud)

第4个参数必须是有效指针,它接收读取的实际字节数.它不能为NULL.更确切地说:仅当lpOverlapped参数不为NULL时,此参数才可以为NULL.

  • LPCTSTR是一个指向空终止字符串的指针.缓冲区b最多包含4个字符而没有终止空字符,长度由bytesRead确定.使用读取字节时,您应该考虑bytesRead.如果你只是想快速调试,那么使b更大,仍然是ReadFile(,,,,然后b [bytesRead] ='\ 0'.之后,b是一个以空字符结尾的字符串,您可以转换为LPCTSTR. (2认同)