필자는 도움이 절실히 필요하므로 Visual Studio에서 응용 프로그램 종속성을 관리해야합니다. 응용 프로그램은 Windows 7의 특정 버전에서만 DLL에 연결되며 다른 환경에서는 DLL이로드되어서는 안됩니다. DLL 지연로드를 사용하여 어떻게 달성 할 수 있습니까?이 주제는 완전히 새로운 것이므로이 특별한 문제에 대해 온라인에서 좋은 참고 자료가 없습니다.지연 로딩 DLL
감사
필자는 도움이 절실히 필요하므로 Visual Studio에서 응용 프로그램 종속성을 관리해야합니다. 응용 프로그램은 Windows 7의 특정 버전에서만 DLL에 연결되며 다른 환경에서는 DLL이로드되어서는 안됩니다. DLL 지연로드를 사용하여 어떻게 달성 할 수 있습니까?이 주제는 완전히 새로운 것이므로이 특별한 문제에 대해 온라인에서 좋은 참고 자료가 없습니다.지연 로딩 DLL
감사
프로젝트는 DLL이는 링커/입력/지연로드 된 DLL이 필드에 지정하여, 필요한 경우 만로드해야에 따라 달라 지정할 수 있습니다. 이 설정은 다른 빌드 구성에 따라 다를 수 있습니다.
답장을 보내 주신 분은 Thx를 사용하실 수 있습니다. 해당되는 경우 예제 또는 코드 스 니펫을 제공 할 수 있습니다. –
지연로드 시점입니다. 코드 일이 아니며 설정 사항입니다. – xtofl
말씨가 틀린 것처럼 보입니다. "DLL이 지연로드 용량과 연결되어 있어야합니다."라고 말하면 해당 DLL의 구성 요소 인 .obj에서 해당 DLL을 만드는 것입니다./DELAY 플래그는 _imported_ 모듈이 아닌 _importing_ 모듈을 실제로 적용합니다. 또한이 지원없이 빌드 된 Windows 2000 DLL을 지연로드 할 수있는 이유이기도합니다. – MSalters
지연로드를 사용하는 대신 dynamicloading과 LoadLibrary
및 GetProcAddress
을 사용하셨습니까? 이것은 사용하기가 더 쉽습니다.
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
PGNSI pGNSI;
SYSTEM_INFO si;
ZeroMemory(&si, sizeof(SYSTEM_INFO));
pGNSI = (PGNSI) GetProcAddress(
GetModuleHandle(TEXT("kernel32.dll")),
"GetNativeSystemInfo");
if(NULL != pGNSI)
pGNSI(&si);
else GetSystemInfo(&si);
MSDN에는 꽤 좋은 설명이 있습니다. here.
기본적으로 지연로드 섹션에 문제의 DLL이 설정되어 있습니다. DLL에있는 함수를 호출 할 때까지 해당 DLL을로드하지 않습니다. 상기 링크에서
는 :비주얼 C++의 링커는 현재의 DLL 지연 로딩을 지원한다. 이 은 DLL 지연로드를 구현하기 위해 Windows SDK 함수 LoadLibrary 및 GetProcAddress를 사용할 필요가 없습니다.
Visual C++ 6.0 이전에는 런타임에 DLL을로드하는 유일한 방법은 LoadLibrary 및 GetProcAddress를 사용하여 입니다. DLL을 사용하는 실행 파일이나 DLL이로드 될 때 운영 체제에서 DLL을 으로로드합니다.
Visual C++ 6.0부터 DLL과 정적으로 링크 할 때 링커는 프로그램에서 함수가 해당 DLL의 함수를 호출 할 때까지 DLL을 지연시키는 옵션을 제공합니다.
응용 프로그램에서 도우미 함수 (Visual C++에서 제공하는 기본 구현 )와 함께 /DELAYLOAD (Delay Load Import) 링커 옵션을 사용하여 DLL로드를 지연시킬 수 있습니다. 도우미 함수는 LoadLibrary 및 GetProcAddress를 호출하여 런타임에 시간에 DLL을로드합니다.
이당신의 프로그램이 DLL에있는 함수를 호출 할 수 있습니다 경우
당신은 DLL을 로딩 지연을 고려해야합니다.
DLL의 함수는 프로그램의 실행이 늦을 때까지 호출되지 않을 수 있습니다.
지연된 DLL로드는 빌드 중 .EXE 또는 .DLL 프로젝트에서 지정할 수 있습니다. 하나 이상의 DLL 로딩을 지연시키는 .DLL 프로젝트 은 Dllmain에서 지연로드 진입 점 을 호출해서는 안됩니다.
지연로드가 어떻게 작동하는지 또는 어떻게 적용 할 수 있습니까? – xtofl