DLL 지연 로드의 제약 조건
가져오기의 지연 로드와 관련하여 몇 가지 제약 조건이 있습니다.
데이터 가져오기는 지원되지 않습니다.이 문제는 LoadLibrary(또는 지연 로드 도우미가 DLL을 로드했음을 확인한 다음에는 GetModuleHandle) 및 GetProcAddress를 사용하여 명시적으로 데이터 가져오기를 처리하면 해결할 수 있습니다.
지연 로드하는 Kernel32.dll은 지원되지 않습니다.이 DLL은 지연 로드 도우미 루틴이 지연 로드를 수행하는 데 필요합니다.
전달되는 진입점의 바인딩은 지원되지 않습니다.
지연 로드된 DLL의 진입점에서 프로세스 단위 초기화가 발생하는 경우에는 DLL의 지연 로드가 결과적으로 해당 프로세스와 동일한 동작을 수행하지 않을 수도 있습니다.또 다른 경우로 DLL이 LoadLibrary를 통해 로드될 때 처리되지 않는 정적 TLS(스레드 로컬 저장소)가 있습니다. 이는 __declspec(thread)을 사용하여 선언됩니다.반면, TlsAlloc, TlsFree, TlsGetValue 및 TlsSetValue를 사용하는 동적 TLS는 정적 DLL이나 지연 로드된 DLL에서도 사용할 수 있습니다.
정적(전역) 함수 포인터는 첫째 함수에 대한 호출 후 가져온 함수로 다시 초기화되어야 합니다.이는 함수 포인터를 처음 사용하면 포인터가 썽크를 가리키기 때문입니다.
정상적인 가져오기 메커니즘을 사용하면서 DLL에서 특정 프로시저 로드만 지연시키는 방법은 없습니다.
사용자 지정 호출 규칙(예: x86 아키텍처의 조건 코드 사용)은 지원되지 않습니다.또한 RISC 컴퓨터에서는 도우미 루틴이나 후크에 부동 소수점 데이터 형식을 사용할 수 없습니다.부동 소수점 레지스터는 어떤 플랫폼에서도 저장되지 않습니다.사용자 지정 도우미 루틴이나 후크 루틴이 부동 소수점 형식을 사용하는 경우에는 컴퓨터에서 부동 소수점 매개 변수가 있는 레지스터 호출 규칙을 사용하여 부동 소수점 상태를 완전하게 저장하고 복원해야 합니다.도우미 함수의 NDP(수치 데이터 프로세서) 스택에서 부동 소수점 매개 변수를 받아들이는 CRT 함수를 호출하는 경우 CRT DLL의 지연 로드에 주의를 기울여야 합니다.