인스턴스 변수의 value값이 ffffffff가 됩니다.
글쓴이: kamui_0021 / 작성시간: 월, 2022/03/28 - 2:05오후
////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// SerialPort::SerialPort() { m_hComm = INVALID_HANDLE_VALUE; //시리얼 통신을 위한 핵심 인스턴스 변수 (디버깅에서 cdcdcdcd로 값을 받음을 확인함) //m_hComm = NULL; m_bOverlapped = FALSE; m_strPortName = ""; } SerialPort::~SerialPort() { Close(); } void SerialPort::Open(const CCommInfo& info) { if(_heapchk() != _HEAPOK) //heap 메모리 에러 확인용 DebugBreak(); Open(info.portNo, info.baudRate, (Parity)info.parity, (BYTE)info.byteSize, (StopBits)info.stopBits); } void SerialPort::Open(int nPort, DWORD dwBaud, Parity parity, BYTE DataBits, StopBits stopbits, FlowControl fc, BOOL bOverlapped) { if(_heapchk() != _HEAPOK) //heap 메모리 에러 확인용 DebugBreak(); //Validate our parameters ASSERT(nPort>0 && nPort<=255); //Call CreateFile to open up the comms port CString sPort; if( nPort < 10 ) sPort.Format("COM%d", nPort); else sPort.Format("\\\\.\\COM%d", nPort); m_hComm = CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, bOverlapped /*? FILE_FLAG_OVERLAPPED : 0*/, NULL); //m_hComm이 함수 실행후에 받는 값이 ffffffff 입니다. if (m_hComm == INVALID_HANDLE_VALUE) { //실제로는 전부 통과하고 바로 throw SerialException으로 이동하여 heap메모리 충돌로 프로그램 전체가 종료합니다 if(_heapchk() != _HEAPOK) //heap 메모리 에러 확인용 DebugBreak(); CloseHandle(m_hComm); Close(); TRACE(_T("Failed to open up the comms port\n")); throw SerialException(::GetLastError()); } // 그리고 아래 중략(수많은 코드들이 있었음) default: { break; } } //Now that we have all the settings in place, make the changes SetState(dcb); s_CommList.AddTail(this); // Do we need this? }
이런 코드의 상황입니다 (물론 이 코드가 win32 api 표준을 따르고 있기에 문제가 없어 보일수 있습니다)
그렇지만, m_hComm변수의 값이 ffffffff가 되는 것에서 문제가 발생된다고 여겨집니다...
파일생성 함수에서의 문제인지, 아니면 다른 변수의 값으로 인한 문제가 변수 초기화도 거치지 않고 바로 에러처리 루틴으로 빠지는지...(에러 처리 루틴에서도 결국은 메모리 heap문제로 판별해서 프로그램 전체 종료를 시킵니다)
Forums:
https://docs.microsoft.com/en
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#return-value
GetLastError 호출해서 에러 원인을 알아보세요.
댓글 달기