2015년 11월 13일 금요일

CFileDialog::DoModal causes Access Violation

라이브러리 테스트를 위해 간단한 MFC 어플을 만들었다.
파일 열기 한 후 PDF 파일을 선택하고, 라이브러리를 통해 변환하고 결과를 보는 간단한 동작이다.

근데 언젠가부터 테스트 중에 ole32.dll access violation exception이 계속 발생한다.
ole32.dll exception으로 구글링을 아무리 해도 별 내용을 못 찾다가, 코드를 삭제하면서, Dialog에 control을 삭제하면서 원인이 되는 부분을 찾아보았더니, CFileDialog를 호출한 후 exception이 발생한다. 그것도 바로 발생하는 것이 아니라 어느정도 시간이 지난후..

그래서 검색어를 바꿔서 구글링하니 똭~!

http://mfctips.com/2012/10/29/cfiledialogdomodal-causes-access-violation/

ole32.dll이 아니고 ntdll.dll이라고 나오지만, 설명하고 있는 발생상황이 거의 대부분 일치했다. 어느 정도 시간 후 라고 생각했지만 정확히 60초 후에 exception이 발생하는 것도 일치했고,

몇가지 해결방법을 제시하고 있지만, 첫번째 Disable "Vista Style"로 하니 정상동작 한다. FileDialog가 예전의 구린 모습으로 나오긴 하지만..

두번째 Hotfix는 exception이 발생하는 dll이 달라 적용이 불가능해 보인다.

그 외 제일 가능성 있어 보였던 Uninstall Acrobat Reader.
최근 테스트를 위해 Acrobat 제품을 설치 한 적이 있어서 혹시나 하고 삭제 해 보았으나 실패!

Disable 3rd party shell extensions.
아직 테스트 해 보진 않았으나 원인 일 수 있을 것 같다. 근데 결국 설치된 어플을 삭제해가면서 확인 해 봐야 할 것 같아서 꼭 해야 하나 싶은 생각이 든다.