串口是否就是Socket?
如果是,我有代码的,但数据库用的是INFORMIX
如果是,我有代码的,但数据库用的是INFORMIX
解决方案 »
- 如何获得剪切板中的格式信息?
- 可以在继承在CView的类里面使用OnSysCommand函数吗?
- IOCP之OVERLAPPEDPLUS释放的问题
- 急求像“QQ设置”那种界面的例子
- 在word里面如何添加一个文本框,急急 加急。请高手指教,在线等待
- 回调到底啥意思
- 100分求教,如何获得ie浏览器的view视图的滚动条句柄及当前位置,谢谢!
- 关于可移植的讨论,关于win32 api的
- 哪位高手给指点指点:VC中获得一图片像素之后,又由Bitmap::FromBITMAPINFO()函数重新生成位图后,图像发生移动,图像左边一部分跑到位图右侧。
- 如何向模态对话框传递消息
- 请给出打印杨辉三角形的C代码
- 请问怎样把 char 转换成 int ?
接下来就向平常的数据处理一样了。
DWORD iErr;
BOOL bTemp;
m_Handle = ::CreateFile(
LPCTSTR("COM1"),
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//异步通信
// FILE_FLAG_WRITE_THROUGH,
NULL);
if (m_Handle == INVALID_HANDLE_VALUE)
{
iErr = ::GetLastError();
return TRUE;
}
m_Bool = TRUE; //获得端口默认设置
DCB dcb;
dcb.DCBlength = sizeof(DCB);
bTemp = ::GetCommState(m_Handle,&dcb);
if (!bTemp)
{
iErr = ::GetLastError();
return TRUE;
}
//设置通信端口
dcb.BaudRate = CBR_9600; // 波特率为9600
dcb.ByteSize = 8; // 数据为8位
dcb.StopBits = ONESTOPBIT; // 停止位为1
dcb.Parity = NOPARITY; // 无奇偶校验
dcb.fBinary = TRUE; //允许2进制模式
bTemp = ::SetCommState(m_Handle,&dcb);
if (!bTemp)
{
iErr = ::GetLastError();
return TRUE;
} //设置端口超时时长
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 1000; // 1秒
::SetCommTimeouts(m_Handle,&CommTimeOuts); bTemp = ::PurgeComm(m_Handle,PURGE_TXCLEAR); //清发送缓冲区
if (!bTemp)
{
iErr = ::GetLastError();
}
bTemp = ::PurgeComm(m_Handle,PURGE_RXCLEAR); //清接收缓冲区
if (!bTemp)
{
iErr = ::GetLastError();
} BOOL bTemp;
DWORD iErr;
OVERLAPPED OverlappedRead;
DWORD dTemp; OverlappedRead.hEvent = ::CreateEvent(
NULL,
TRUE, //人工复位
FALSE,
NULL);
if (OverlappedRead.hEvent == NULL)
{
iErr = ::GetLastError();
MessageBox(LPCTSTR("事件初始化失败"));
return;
} char* lpBuffer;
DWORD nNumberOfBytesToRead;
DWORD nNumberOfBytesRead; lpBuffer = new char[1024];
nNumberOfBytesToRead = 1024;
bTemp = ::ReadFile(
m_Handle,
lpBuffer,
nNumberOfBytesToRead,
&nNumberOfBytesRead,
&OverlappedRead); if (!bTemp)
{
iErr = ::GetLastError();
if (iErr != ERROR_IO_PENDING)
{
::CloseHandle(OverlappedRead.hEvent);
return;
}
dTemp = ::WaitForSingleObject(
OverlappedRead.hEvent,
TIMEOUT);
if (dTemp == WAIT_FAILED)
{
::CloseHandle(OverlappedRead.hEvent);
return;
}
if (dTemp == WAIT_TIMEOUT)
{
::CloseHandle(OverlappedRead.hEvent);
return;
}
::ResetEvent(OverlappedRead.hEvent);
}
::CloseHandle(OverlappedRead.hEvent); lpBuffer[nNumberOfBytesRead] = NULL;
m_ReadMsg = (CString)lpBuffer;
UpdateData(FALSE); if (lpBuffer != NULL)
{
delete lpBuffer;
lpBuffer = NULL;
}
MORE INFORMATION 中有详细的介绍,大概过程是:打开串口-初始化-读数据;具体看有关的文
章吧。读串口数据一般用事件驱动函数来做,类似单片机中的中断响应。
数据库如果用ACCESS文件,选择ODBC是比较方便的。如果用SQL SERVER,个人更倾向于DBLIBRARY。