본문 바로가기
Program/C++ MFC

[C++ MFC] DLLNotFoundException 오류 해결 방법

by 냠만 2024. 6. 30.

[문제상황]

필자는 제어 프로그래머입니다. C++ 프로젝트를 갈아엎고 C#으로 리빌딩하는 중 발생한 문제에 대한 해결책 기록입니다.

 

개인적으로 기록하여 기억에 오래 남기기 위함으로 두서가 없을 수 있습니다.

일단 문제가 발생된 시점은 서보드라이버 컨트롤을 위하여 해당되는 보드의 라이브러리를 끌어와 사용하는 과정에서 발생된 오류입니다. 문제점이 발생된 계기는 새로운 PC를 셋업 하며 발견되었다는 점 참고 부탁드립니다.

기존에 셋업된 PC에서는 정상 동작하지만 새로운 PC에서는 동작하지 않아서 디버깅을 진행하였습니다. 결과적으로 문제는 컨트롤보드 제조사에서 제공하는 API를 불러오는 과정에서 참조 오류가 발생되었습니다.

 

[해결 순서]

구글링을 진행하다보니 유용한 글을 발견했습니다. 먼저 삽질을 통해 해결 방법을 공유해 주신 Praiv님께 감사드립니다. 글에는 C#에서 C++ DLL을 로드하는 과정에서 확인되어야 할 체크항목이 적혀있습니다.

그리고 DLL의 의존성 구조를 트리형식으로 표현해주는 프로그램을 하나 알 수 있습니다.

 

분명 유용한 정보이긴 하지만 저의 문제점과 완전 일치하진 않습니다. 하여 프로그램을 설치하고 DLL을 열어봤습니다.

DLL을 열어보니 의존성 구조가 보입니다. 하단의 의존성은 패키지형식으로 구성되어 있으므로 상단을 제외하고는 모두 축소해 줍니다.

이 과정에서 보이는 의존성 항목을 검색했습니다.

저는 다행히 맨 위에 있는 MFC80이라는 친구가 문제의 원인이었습니다.

보통 패키지를 설치하는 과정에서 VC++ 재배포 패키지가 설치되지만 보드 제조사에서 제공하는 인스톨러를 설치하는 과정에서 새로운 버전에 재배포 패키지가 누락되어 있어 발생된 문제였습니다.

정리하자면 아래와 같습니다.

A Old PC = Board 2023 버전 설치 (VC++ 재배포 패키지 포함)

B New PC = Board 2024 버전 설치 (VC++ 재배포 패키지 누락)

[참고 사항]

VC++ 재배포 패키지는 간혹 게임에서도 사용되는 경우가 있기 때문에 MSVCP.dll 오류가 발생된다면 해당 버전의 재배포 패키지를 설치함으로써 문제를 조치할 수 있습니다.

 

재배포 패키지의 버전을 확인하는 방법은 여기 사이트를 참고하시면 됩니다.

재배포 패키지 버전 다운로드를 위해서는 여기 사이트에서 해당 버전의 서비스팩 재배포 패키지 mfc 보안 업데이트에 접근하셔서 다운로드하신 다음 '관리자 권한으로 실행'을 통해 설치하시면 정상 동작 합니다.