2009-10-03 2 views
2

내 시나리오는 다음과 같습니다. 내 응용 프로그램은 특정 DLL (연결 중에 lib 사용)에 의존합니다. 그러나 응용 프로그램이 실행될 때 LoadLibrary를 사용하여 해당 DLL을 명시 적으로로드하려고합니다. 그러나 기본적으로 코드가 해당 DLL이 필요한 범위에 도달하면 환경에서 자동으로 찾아서로드합니다. 이 동작을 비활성화하려면 모든 응용 프로그램이 해당 DLL에 속한 코드를 실행하려는 지점에 도달하면 자동으로로드하는 대신 충돌이 발생합니다 (DLL이로드되므로 왜냐하면 내가 명시 적으로 LoadLibrary를 호출했기 때문입니다.)
한편, 지연로드 기능을 사용하고 있습니다 (로드 트리거는 DLL이 실제로로드되어야 할 때만 발생합니다). 그러나 DLL을 아직로드하지 않은 경우 응용 프로그램이 충돌하는 것을 선호합니다.C++에서 자동 DLL 로딩 사용 안 함

아마도이 방법을 익히 알고있는 사람이 누구일까요? 당신이 그것을로드하려면

+0

왜 이렇게하고 싶은지에 대한 배경 정보를 제공해 줄 수 있습니까? – JaredPar

답변

6

LoadLibrary을 사용하려면 응용 프로그램을 가져 오기 라이브러리와 연결하지 마십시오. PE 형식은 확인되지 않은 외부를 지원하지 않으므로 머리글과 dllimport 또는 LoadLibrary, GetProcAddress 및 포인터를 사용합니다.

4

수동으로 당신이 당신의 링커의 *.lib 파일을 통과하지 않아야 LoadLibraryGetProcAddress를 사용하여

(나는 그것을 연결하는 동안 lib 디렉토리의 사용).

2

DLL의 가져 오기 라이브러리 (.lib 파일)에 연결하지 않아도 자동로드를 방지 할 수 있습니다. 그런 다음 LoadLibrary를 사용하여 필요할 때마다 수동으로 DLL을로드 할 수 있습니다.

나는 here과 같은 일을하는 블로그 항목을 올렸습니다.

0

delayload 기능은 범위가 아닌 첫 번째 함수 호출까지 dll을로드합니다. 그 dll을 호출하는 전역 이니셜 라이저가있는 경우 그 이유는 그 범위를 기반으로 생각하는 이유 일 수 있습니다. 우리 회사는 문제없이 사용하기 전에 LoadLibrary를 호출하는 기술을 사용합니다. 나는 너의 문제를 더 깊이 파고들 것을 제안한다.

+0

나는 그것이 내가 처음에 delayLoad를 사용한 이유임을 알고있다. –

1

지연로드 메커니즘을 연결할 수 있습니다. 제공된 함수에 __pfnDliNotifyHook2을 설정하면 해당 후크에서 응용 프로그램을 종료합니다.