我想写一个仪器(DSM-2)与计算机的COM接口的数据传送程序,单不知道怎么写?
请帮忙看看! 谢谢!!!
请帮忙看看! 谢谢!!!
解决方案 »
- 关于网络半开放公司
- 想修改openCV1.0的源码,然后编译生成新的库供VC6.0使用,该怎么做?谢谢
- 当鼠标移到按钮或其它控件时出现TOOLTIP,请问是怎么做的?
- 请问如何知道我的DLL所在进程的句柄 是不是 当前的焦点窗口?(dll中只知道HINSTANCE hins 不知道怎么得到HWND)
- MDI程序中如何记录其打开的所有的MDI窗口?
- 100~~~我想获得list ctrl控件中的每一个的标题列的窗口指针,如何写代码?
- 急急急!如何控制PropertySheet的退出?
- S.O.S!只要能用!给100分!!!但要在5/21日前
- 如何 利用VC和自动化编程 给word设密码,或者将属性设为只读。
- DLL提供的函数,使用数据库操作报错
- HTML Help Workshop 这个东东不会用!谁可以帮我一下!100分
- 哪位在VC6(SP5)下编译过了ACE/TAO?
http://www.yesky.com/20010529/181919_1.shtml
// 打开并配置串口
BOOL SZM::OpenComPort( int nPort, int nBaud )
{
if( m_bOpened ) return( TRUE ); char szPort[15];
char szComParams[50];
DCB dcb; wsprintf( szPort, "COM%d", nPort );
idComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL );
//文件名称,参与方式,共享方式,安全属性,建立,文件属性,文件句柄
if( idComDev == INVALID_HANDLE_VALUE ) return( FALSE ); wsprintf( szComParams, "COM%d:%d,n,8,1", nPort, nBaud );
dcb.DCBlength = sizeof( DCB );
GetCommState( idComDev, &dcb );
SetupComm( idComDev, 1024, 1024 ); dcb.BaudRate = nBaud;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fInX = dcb.fOutX = true; dcb.fOutxDsrFlow = dcb.fOutxCtsFlow = false;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE; if( !SetCommState( idComDev, &dcb ) ||
!SetupComm( idComDev, 10000, 10000 ) ){ CloseHandle( idComDev );
return( FALSE );
}
PurgeComm ( idComDev ,PURGE_TXCLEAR | PURGE_RXCLEAR );
m_bOpened = TRUE; return( m_bOpened );
}
BOOL SZM::WriteCommByte( unsigned char ucByte )
{
int bWriteStat;
DWORD dwBytesWritten;
bWriteStat = WriteFile( idComDev, (LPSTR) &ucByte, 1, &dwBytesWritten, NULL );
if (bWriteStat ==1)
return( TRUE );
else return( FALSE );
}
// 读串口
int SZM::ReadData( void *buffer, int limit )
{
unsigned long rc;
if( !m_bOpened || idComDev == NULL ) return( 0 ); DWORD dwBytesRead, dwErrorFlags;
COMSTAT ComStat; ClearCommError( idComDev, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return( 0 ); dwBytesRead = (DWORD) ComStat.cbInQue;
if( limit < (int) dwBytesRead ) dwBytesRead = (DWORD) limit; ReadFile( idComDev, buffer, dwBytesRead, &rc, NULL );
return( rc );
}
// 关闭串口
BOOL SZM::CloseComPort()
{
if ( (m_bOpened==FALSE) || ( idComDev != INVALID_HANDLE_VALUE ) ) return (TRUE);
CloseHandle(idComDev);
m_bOpened = FALSE;
idComDev = NULL; return TRUE;
}