MFC39 MFC 예외 객체(CException)가 해제되지 않아 메모리 누수가 발생 MFC의 예외 처리(CException)는 일반 C++ 예외와는 조금 다른 관리 방식이 있어서 헷갈리기 쉽습니다. 핵심은 MFC의 예외 객체는 보통 힙에서 생성되고, 반드시 Delete()로 해제해야 한다는 점입니다. 상황 분석try { } catch (...) { } 여기서 catch (...)는 모든 예외 타입을 잡습니다. 하지만 구체적인 타입(CException*)을 지정하지 않았기 때문에, 예외 객체에 접근할 수 없습니다.MFC에서 CException은 보통 new로 생성된 후 던져집니다. 따라서 catch (CException* e)로 받아서 e->Delete()를 호출해야 메모리 누수가 발생하지 않습니다.catch (...)만 쓰면 CException* 포인터를 받을 수 없으므로, Delete.. 2025. 12. 23. MSXML에서 createElement를 사용할 때 자동으로 xmlns="" 속성이 붙는 이유와 막는 방 MSXML에서 createElement를 사용할 때 자동으로 xmlns="" 속성이 붙는 이유는 네임스페이스를 지정하지 않고 요소를 생성했기 때문입니다. 이를 막으려면 createElement 대신 createNode를 사용하여 네임스페이스를 명시적으로 지정하거나, createElement 호출 시 올바른 네임스페이스를 함께 전달해야 합니다. https://learn.microsoft.com/en-us/answers/questions/857792/how-to-remove-the-xmlns-attribute-that-gets-added how to remove the xmlns attribute that gets added by the xmldocument - Microsoft Q&AHi experts ,.. 2025. 12. 19. BluetoothFindFirstDevice Example https://learn.microsoft.com/ko-kr/windows/win32/api/bluetoothapis/nf-bluetoothapis-bluetoothfindfirstdevice BluetoothFindFirstDevice 함수(bluetoothapis.h) - Win32 appsBluetoothFindFirstDevice 함수는 Bluetooth 디바이스 열거를 시작합니다.learn.microsoft.comBluetoothFindFirstDevice 함수는 Bluetooth 디바이스 열거를 시작합니다.HBLUETOOTH_DEVICE_FIND BluetoothFindFirstDevice( const BLUETOOTH_DEVICE_SEARCH_PARAMS *pbtsp, BLUETO.. 2024. 10. 21. CFileDialog의 Title 이름 변경하는 방법 https://learn.microsoft.com/ko-kr/cpp/mfc/reference/cfiledialog-class?view=msvc-170 CFileDialog 클래스 자세한 정보: CFileDialog 클래스 learn.microsoft.com CFileDialog 클래스에 m_ofn 구조체가 존재한다. CFileDialog::m_ofn Windows OPENFILENAME 구조체입니다. 기본 파일 대화 상자 매개 변수에 대한 액세스를 제공합니다. 아래와 같이 구조체의 lpstrTitle 변수에 이름을 넣으면 Title이 변경이 된다. CString name_filter = _T("Txt Files(*.txt) | *.txt; ||"); CFileDialog dlg(TRUE, NULL, NU.. 2024. 1. 16. MFC 단축키 Accelerator 리소스 추가 https://learn.microsoft.com/ko-kr/windows/win32/learnwin32/accelerator-tables 액셀러레이터 키 테이블 - Win32 apps 액셀러레이터 키 테이블 learn.microsoft.com MFC 프로젝트에 Accelerator 리소스를 아래 이름으로 추가합니다. IDR_ACCEL1 리소스 편집기에서 관련 단축키를 지정합니다. ID_FILE_OPEN, ID_FILE_SAVE 등은 기본적으로 생성이 되는데 Main Menu, Toolbar에 관련 ID가 등록되어 있으면 아래와 같이 Accelerator를 등록하지 않아도 작동이 되는 것 같습니다. 그러나 사용자가 추가한 ID는 아래와 같이 등록을 하지 않으면 작동이 되지 않는 것을 확인 했습니다. 헤더.. 2024. 1. 16. 최근 열어본 파일 MRU Menu Items 처리 커스텀 방법 MFC의 Main Menu에 "최근 열어본 파일" 리스트를 표시하고 그 리스트를 선택 했을 때 Doc의 OnOpenDocument(LPCTSTR lpszPathName) 함수가 호출된다. MFC 프레임워크에서 처리를 하기 때문에 OnOpenDocument(LPCTSTR lpszPathName) 함수 전에 CDocTemplate을 선택 한다거나 다른 작업을 하려면 아래와 같은 방식으로 처리를 하면 된다. 내가 이 작업을 하게 된 이유는 프로그램 내부 버전 별로 CDocTemplate을 어려게 사용을 하는데 자동을 OnOpenDocument(LPCTSTR lpszPathName) 함수가 호출되니 원하는 CDocTemplate으로 표시가 되지 않는 문제가 있었다. 참고로 CDocTemplate을 선택하는 방법.. 2024. 1. 15. UpdateData() 함수 Param 의미 MFC에서 UpdateData()를 사용해서 Control의 값을 변수로 적용하거나 반대로 처리한다. void etModalProgressThread::UpdateData(BOOL b) { etModalProgressDlg * pDlg = (etModalProgressDlg *)m_pMainWnd; pDlg->m_title = m_title; pDlg->m_Text = m_Text; pDlg->SendMessage(UM_MODAL_UPDATEDATA, (WPARAM)b, 0L); } https://learn.microsoft.com/en-us/cpp/mfc/dialog-data-exchange?view=msvc-170 Dialog Data Exchange Learn more about: Dialog Da.. 2023. 7. 7. ON_CONTROL_RANGE를 이용해서 같은 이벤트 처리를 한 함수로 해결 방법 아래 예는 ComboBox를 3개 만들고 각각의 ComboxBox Select Change 이벤트를 처리하는 함수를 만들었다. ON_CBN_SELCHANGE(IDC_CB_1, OnCbnSelchangeCombo1) ON_CBN_SELCHANGE(IDC_CB_2, OnCbnSelchangeCombo2) ON_CBN_SELCHANGE(IDC_CB_3, OnCbnSelchangeCombo3) 위와 같이 3개의 이벤트 함수를 만들었는데 각각의 처리 내용이 비슷하다면 하나의 함수로 만들고 싶을 것이다. 이때 사용 할 수 있는 것이 ON_CONTROL_RANGE이다. ON_CONTROL_RANGE(CBN_SELCHANGE, IDC_CB_1, IDC_CB_3, OnCbnSelchangeComboByID) Contro.. 2023. 7. 5. HEX CString to BYTE array MFC Unicode CString을 BYTE 배열로 리턴하는 함수 예제 HEX string은 "0xab 0x01 0x02 0x03 0xfa 0xFF"와 같이 Space로 구분되어 있을 경우 /// 유니코드 CString /// strData = _T("0xab 0x01 0x02 0x03 0xfa 0xFF"); /// rt[] = { 253, 1, 2, 3, 250, 255 }; byte* etUsbTestDlg::StringToHex(CString strData) { CString strValue; int i = 0; // substring index to extract TCHAR chSep = ' '; byte rt[1024] = { 0, }; while (AfxExtractSubString(strV.. 2023. 5. 8. 이전 1 2 3 4 5 다음