반응형
- 출처 : 나, from 연습용소스...
예제 소스코드
CreateFile()
- 시리얼 open시.. 이때 nonoverlap으로;;
if ((m_tHandle.hSerialDev = CreateFile(lpPortName, GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL , // overlapped I/O
NULL)) == INVALID_HANDLE_VALUE)
{
m_tHandle.hSerialDev = NULL;
WriteToDebugFile(_T("Serial_Msg : CreateFile() Fail..\r\n"));
return FALSE;
}
일반파일 open
hLogFileHandler = CreateFile(szCurTempFullFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
ReadFile()
데이터 한번에 못읽었을때 옵션추가..
DWORD SerialComm::SerialRead(LPSTR lpszBlock, DWORD dwMaxLength)
{
DWORD dwToRead;
DWORD iLengthTemp=0;
....
if (dwRead >= 1)
{ // 한번에 다 못읽으면 포인터 옮기면서 버퍼에 저장, 버퍼길이는 계속 줄어듬..
ReadFile(m_tHandle.hSerialDev, (lpszBlock+iLengthTemp),
(dwMaxLength-iLengthTemp), &dwToRead, 0); // 블럭단위로 꺼내옴
iLengthTemp+=dwToRead; // 여러번 읽어와도 최종 길이만 리턴..
}
....
}
WriteFile()
바이트단위 라이팅.. (오류체크 제외..)
BOOL SerialComm::SerialWrite(TCHAR* lpByte)
{
BOOL fWriteStat ;
DWORD nToWrite , dwWrite;
nToWrite = _tcslen(lpByte);
fWriteStat = WriteFile(m_tHandle.hSerialDev,lpByte,nToWrite*sizeof(TCHAR),&dwWrite,NULL);
if (!fWriteStat)
{
WriteToDebugFile(_T("Serial_Msg : Write -> WriteFile() Fail..\r\n"));
return FALSE;
}
return TRUE;
}
CString을 유니코드 환경에서의 writefile()
// CString ==> char* 변환시작..
nToWrite = m_valEditWrite.GetLength();
TCHAR * szpTempBuff = new TCHAR[nToWrite + 1]; // 1은 NULL을 위한 여유공간
_tcscpy(szpTempBuff, m_valEditWrite.GetBuffer(0));
if(WriteFile(m_hFckHandle, szpTempBuff, nToWrite*sizeof(TCHAR), &dwWriten, 0))
{
CString CstringTemp;
// 성공하면..
CstringTemp.Format(_T("Write : %s [%d]\r\n"), szpTempBuff, dwWriten);
WriteToStatusEditControl(CstringTemp);
}
else
{
WriteToStatusEditControl(_T("ERROR : Write fail!!!\r\n"));
}
반응형