본문 바로가기

assert

MFC에 Flash ActiveX 올리고 에러 발생 FormView에 Flash ActiveX 컨트롤을 올렸을 때 실행이 되지 않는 문제가 있었습니다.이전 버전의 Visual Studio에서는 디버그 모드에서 ASSERT에서 문제가 생겼습니다.Visual Studio 2015에서는 다음과 같은 문제가 발생했습니다.문제가 생기는 부분이 이상한 곳이기 때문에 찾기가 어려웠습니다. AfxOleInit() 함수를 호출하는 부분에서 에러가 발생합니다.MSDN을 통해서 관련 내용을 확인할 수 있었습니다.CoInitializeEx()를 호출할 경우에 COINIT_APARTMENTTHREADED를 사용하라는 것이었습니다.호출할 때 COINIT_MULTITHREADED로 호출했기 때문에 발생한 문제였습니다.CoInitializeEx()를 호출할 때 COINIT_APART.. 더보기
SDI(or MDI)에서 View를 포함하는 Dialog 띄울 때 문제점 SDI 형식에서 View를 포함하는 Dialog를 생성하면 문제점이 발생합니다.먼저 메뉴를 클릭하면 다이얼로그가 DoModal()을 통해서 생성이 됩니다.DoModal()로 생성된 다이얼로그 내부에서 CView나 CView를 상속한 뷰를 생성해서 포함시킵니다.다이얼로그 내부에서 뷰를 컨트롤처럼 추가하는 것입니다.이렇게 했을 때 다이얼로그의 내부 뷰 영역을 마우스로 클릭하면 문제가 발생합니다. ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame)); 바로 위와같은 ASSERT문에 걸리게 됩니다.문제의 원인은 다음과 같습니다.SDI 형태는 MainFrame이 있고 그 안에 View가 들어갑니다.MainFrame에 바로 붙는 View.. 더보기
[C++11] static_assert를 통한 컴파일 타임 검증 static_assert는 컴파일 타임에 소프트웨어 assertion을 위해서 추가된 문법입니다. 만약 작성된 constant-expression이 false(거짓)일 경우에 컴파일러는 메시지를 출력하고 C2338 에러를 출력합니다. 만약 true라면 아무런 영향도 발생하지 않습니다. 이미 C++에는 #error 전처리기 지시자와 assert 매크로를 통해서 assertion 처리가 가능합니다. 다만 C++의 assert는 런타임에 비교를 수행하기 때문에 성능의 하락을 가져올 수 있는 단점이 있습니다. 컴파일 타임에 해당하는 문제를 더 빨리 찾아내는 것이 모든 면에서 더 낫다고 할 수 있습니다. #error의 경우는 컴파일 타임에 처리가 가능합니다. 다만 템플릿이 구체화되기 전에 수행되버리기 때문에 템플.. 더보기