티스토리 뷰

프로그래밍/C++

0x00000c7b 오류 원인

에어버스 2018. 6. 30. 19:43

0x00000c7b 오류 원인

0x00000c7b 오류 : http://petra.tistory.com/1247

http://www.dependencywalker.com/    depends22_x86.zip

1. Depends 로 검색해서 해당 DLL 파일이 전부 실행파일이 있는 폴더에 있는지 확인한다.

2. https://visualstudio.microsoft.com/ko/downloads/    에 연결해서 화면을 아래로 내리면 모든다운로드에서기타도구및프레임워크 클릭하고 Visual Studio 2017용 Microsoft Visual C++ 재배포 가능 패키지 를 x86/x64 용도에 맞는것을 설치한다. (VS2017 정적MFC로 Release 모드로 빌드하고 Release 폴더를 다른 PC에 복사해서 실행하니 에러 나서 재배포를 설치해야 했다)

소스코드가 있는 폴더에 32비트용 Zip_d.lib와 Zip_d.dll 64비트용 Zip64_d.lib, Zip64.dll 을 복사한다.

<그림1>

VisualStudio2017 에서 Debug모드, 64비트용으로 실행버튼을 클릭해서 실행하면 아래 그림과 같은 오류가 난다.

<그림2>

관련 dll 파일이 없으면 아래 그림처럼 오류가 난다.

<그림3>

그림2> 같이 오류가 나는 이유는 Zip DLL 의 VisualStudio 프로젝트 속성에서 아래 그림처럼 debug모드, x64 로 대상이름에 '_d' 로 지정했기에 컴파일하면 Zip_d.dll 이 만들어 진다. 이것을 32비트용과 구분하기 위해 임의로 Zip64_d.dll 로 파일 이름을 변경해서 <그림1>처럼 소스 코드가 있는곳에 복사했다.

64비트용 Depends.exe 를 실행해보면, 아래 그림같이 64비트용 ComsoleZip.exe 가 32비트용 Zip_d.dll 을 참조하고 있음을 알 수 있다. 결국, <그림2> 처럼 오류가 나는 이유는 64비트 프로그램에서 32비트 DLL 을 참조하고 있어 생긴 문제였다.

64비트용 Zip_d.dll 을 64비트 실행파일이 있는 폴더에 복사(아래 그림 참조)해서 실행파일을 실행하면 파일 압축과 해제가 문제없이 실행된다.

결국, VisualStudio2017 프로젝트 속성에서 32비트용과 64비트용 대상이름을 따로 지정하던가, 지금 처럼 같은 이름으로 만들어진 경우, 배포시 실행파일이 비트수에 맞게 DLL, Lib 파일을 배포해줘야 한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30