2011-11-30 2 views
0

누락 된 DLL에 대해 불평하는 EXE없이 하위 폴더에 DLL을 저장할 수 있기를 원합니다. "DLL"과 같은 하위 폴더에서 EXE 모양을 만들려면 어떻게해야합니까? 이것과 관련이 있다면, IDE는 Code :: Blocks입니다.C++ 프로그램에서 DLL을 찾는 방법은 무엇입니까?

+0

폴더를 PATH에 추가 할 수 있습니다. – Cyclonecode

+0

경로를 설정하지 않고도 다른 컴퓨터에 폴더를 배포 할 수 있기를 원합니다. – Ripspace

+1

그런 다음 * .exe와 같은 디렉토리에 넣으십시오. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx – PeterT

답변

2

명시 적로드 (LoadLibrary/GetProcAddress)로이 작업을 수행하기는 쉽습니다. 바인딩 프로세스를 제어하고 LoadLibrary에 전체 경로를 전달하기 만하면됩니다.

암시 적 로딩의 경우 사용자는 시스템을 이용해야합니다. PATH 변수를 늘릴 수는 있지만 매우 엄격합니다. 모든 DLL을 실행 파일과 함께 넣거나 PATH를 수정하는 선택에 직면했을 때, 나는 항상 이전의 것을 선택할 것입니다.

DLL redirection 옵션도 있지만 Microsoft는 리디렉션을 사용하는 대신 실행 파일과 함께 DLL을 배치하는 것이 좋습니다.

+0

고마워요! 이제는 폴더를 깨끗하게 유지할 수 있습니다. 그러나로드가 조금 느립니다. 아마도 EXE 파일 옆에 dll을 넣는 것이 좋습니다. – Ripspace

+0

실행 가능한 권장 사항 옆의 DLL은 보안상의 이유로 사용됩니다. –

2

매니페스트 또는 리디렉션을 통해이를 수행하는 방법이 있지만 이것들은 매우 복잡합니다. 다음과 같이 내가 대신 그에게 추천 할 것

, 당신은 구조를 사용하여 실제 응용 프로그램이 myapp_internal.exe입니다 위의 예에서

myapp.exe 
DLLs/ 
    myapp_internal.exe 
    mydll1.dll 
    mydll2.dll 

을, 그리고 그래서 모든 DLL을 수 있으며, DLL 하위 폴더에 간다 올바르게 배치하십시오. myapp.exe 바이너리는 myapp_internal.exe을 실행하는 스텁 응용 프로그램 일뿐입니다.

도움이 되었기를 바랍니다.

+0

그건 꽤 영리한 생각입니다, 그것은 나를 위해 잘 작동해야합니다. – Vladivarius

0

나는 이것을 실제로 시도하지는 않았지만 작동하지 않아야하는 이유는 없습니다 (유명한 마지막 단어).

  1. DLL의 지연로드를 켭니다. linker option or compiler #pragma.
  2. (DLL 함수를 호출하기 전에) 초기에 DLL 디렉토리를 포함하도록 프로세스의 'PATH 환경 변수 복사본을 수정하십시오. 이렇게하면 프로세스가 DLL을 찾을 수는 있지만 시스템 PATH 변수에는 영향을 미치지 않습니다. 당신이 정말로 오히려에서 LoadLibrary/GetProcAddress를를 사용하려는 경우

, 자신이 부탁을하고 사용을 단순화하기 위해 wrapper library를 사용합니다.

관련 문제