2017-05-04 20 views
0

나는이 웹 사이트에서 내가 찾고있는 것을 검색했다; 그러나 나는 이해하지 못한다.C++에서 내 프로그램의 Windows "DLL을 찾을 수 없음"오류를 표시하는 방법?

그래서이 질문을 작성했습니다.

.dll 파일과 프로그램을 C++ (코드 블록 IDE)로 작성했습니다. dll 파일과 프로그램이 같은 디렉토리에 있으면 내 프로그램이 작동합니다.

하지만 DLL 파일을 삭제하고 내 프로그램을 실행할 경우, 윈도우 날이 오류를 보여줍니다. "xxx.exe이며 작동이 중지되었습니다"

"컴퓨터에서 xxx.dll이 누락되어 프로그램을 시작할 수 없습니다." 메시지 대신.

어떻게해야합니까?

+0

[응용 프로그램 매니페스트] (. https://msdn.microsoft.com/en-us/library/windows/desktop/aa374191(v=vs.85).aspx)에서 .dll을 종속성으로 지정해야 할 수도 있습니다.). – VTT

+0

왜 이걸 원하니? 일반 사용자는'\ Program Files \ YourApp \ '에있는 파일을 변경할 수있는 권한이 없으며 관리자는 프로그램을 중단시키지 않을 것을 신뢰해야합니다. 그리고 그들이 아직도한다면, 그들은 그들의 행동의 결과를 이해해야합니다. – MSalters

+0

@MSalters 사용자는 "모든 불필요한 파일 삭제"를 포함한 모든 종류의 작업을 수행합니다. 그건 바보 같네요. 그렇다고해서 그런 일이 일어나지 않을 것이라는 의미는 아닙니다. 그리고 유능한 관리자가있는 시스템에 대한 것이라고 생각하는 이유는 무엇입니까? – Aziuth

답변

1

연결할 수있는 링크가 3 가지 있습니다. 연결

  • 로드 시간은 프로그램이 시작될 때 DLL 자동으로로드 할 때입니다. Windows는 일반적으로이 DLL을 실행 파일과 동일한 폴더에서 찾습니다.
  • 런타임 연결은 코드에서 LoadLibrary를 호출하여 DLL을로드하는 경우입니다.

When the application calls the LoadLibrary or LoadLibraryEx functions, the system attempts to locate the DLL (for details, see Dynamic-Link Library Search Order). If the search succeeds, the system maps the DLL module into the virtual address space of the process and increments the reference count. If the call to LoadLibrary or LoadLibraryEx specifies a DLL whose code is already mapped into the virtual address space of the calling process, the function simply returns a handle to the DLL and increments the DLL reference count. ~ taken from here

은 무엇 당신이 원하는 당신의 DLL을 런타임 링크입니다 대신 당신이 현재하고있는 일의 결과를 테스트합니다.

    의 loadLibrary 당신을 위해 호출 처리
  • Visual Studio offers a third option, delay-loaded DLL's.~ MSalters


.

+1

Visual Studio는 세 번째 옵션 인 지연로드 DLL을 제공합니다. CodeBlocks/MinGW에 대한 옵션이 아닙니다. – MSalters

+0

정보 주셔서 감사합니다! MinGW 사용자로서이 기능은 존재하지 않았습니다. 답변을 수정하여 내 댓글을 고려합니다. –