Visual Studio 2022에서 MFC프로젝트에 한 Dialog를 리소스뷰로 열었을 때 에러가 발생했다.

확인을 누르니 해당 리소스뷰에는 아래와 같이 에러 메세지만 띄우고 다이얼로그 GUI를 확인할 수 없었다.

An error occurred while initializing the frame's content System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.
해당 에러메세지로 검색해 보니 주로 Visual studio에서 다이얼로그에서 사용하는 ActiveX 모듈이 정상적으로 설치되어 있지 않은 상황이었고 대부분은 사용하는 ocx를 새로 등록해 주면 해결이 가능했다.
주로 개발하던 PC에서만 등록되어있는 ocx가 다른 PC에서 프로젝트를 열었을 때 해당 ActiveX를 찾을 수 없기에 발생하는 케이스들로 보였다.
그러나 나는 해당증상과 관련이 없었고 해당 프로젝트를 장기간 사용해온 다른 동료들의 PC에서도 동일 증상이 발생했다
그렇게 찾다 찾다 결국 밝혀진 것은
https://developercommunity.visualstudio.com/t/WinForms-NET-Framework-Projects-cant-d/1601210
<p>WinForms .NET Framework Projects can't display the d...
<p>[severity:It's more difficult to complete my work] [regression] [worked-in:16.11] Repro steps:</p> <ol> <li><p>In one solution, create a Winforms F...
developercommunity.visualstudio.com
오래된 OS를 사용하는 유저들의 PC를 위해 호환성을 유지하려고 32bit로 만들어진 OCX를 사용하여 32비트로 빌드, 배포하고 있었는데..
Visual studio2022부터는 디자이너 환경자체가 64비트로 동작하기에 32비트의 ActiveX 구성요소를 로드할 수 없었다.
빈 프로젝트에서 다이얼로그를 만들어서 32Bit의 ActiveX Control를 추가하려고 해도 설치 목록에 뜨지도 않았고 강제로 경로를 잡아주더라도 등록되지 않았다.
어찌어찌 우회하는 방법이 있는거 같았는데 그것도 MFC에선 불가능하고 Winform의 경우만 가능한 것으로 보이며 그 방법도 잘 안되거나 복잡한 경우가 많아서 대부분 우회는 포기하였다.
그래서 결론적으로 가장 편한 해결방법은 반드시 32bit OCX를 사용해야 한다면 Visual studio 2015 이하의 버전을 사용하는 것이다. 물론 다른 버전에서 다이얼로그에 생성한 32비트의 ActiveX Control은 VisualStudio2022에선 해당 다이얼로그를 보거나 수정할 수 없을 뿐이며 정상적으로 빌드도 되고 동작도 한다.
따라서 해당 다이얼로그를 수정해야 할 때만이라도 잠시 2015켜서 수정하고 평소엔 다시 Visual Studio 2022를 사용하는 방식으로 쓰고 있다.
기업들은 Windows7 이하의 PC와 32비트의 OS에서 동작을 지원함으로써 당장엔 눈앞에 얼마 안 되는 유저를 얻을 순 있겠지만 32비트 프로그램으로 빌드하여 스스로 프로그램의 성능을 낮추고 유지보수에 훨씬 많은 비용을 지불하는 것이 정말 이득인지 고려해 보면 어지간하면 오히려 손해임을 알 수도 있을 것이다.
'운동하는 개발자 > Windows' 카테고리의 다른 글
| CP949 , ANSI , EUC-KR 차이점과 특징 (0) | 2025.02.05 |
|---|---|
| MS Office Excel에 Python 통합 (0) | 2024.12.02 |
| Slack 자동 붙여넣기 문제 해결 (0) | 2024.09.09 |
| 피시 한대 소리를 이어폰(스피커) 두개에서 동시에 듣기 (voice meteer) (1) | 2024.06.19 |
| 복붙을 많이 하는 당신에게 필요한 클립보드 히스토리 (고급 클립보드) (1) | 2024.06.15 |