DLL 로드 지연

1084 단어
- 지연 로드된 DLL은 암시적 링크로, DLL을 처음에 로드하지 않으며, 코드가 DLL에 포함된 기호를 참조하려고 할 때만 DLL을 실제로 로드합니다.
사용처:
- DLL 로드 프로세스를 프로세스가 실행될 때까지 확장합니다. -함수 버전과 운영체제 버전이 일치하는 문제를 해결합니다.
제한:
- 필드를 내보낸 DLL 중 하나가 로드를 지연할 수 없습니다.(글로벌 변수) - Kernel32.dll에서 불러오는 것을 지연할 수 없습니다.이 DLL을 불러와야 LoadLibrary와 GetProcAddress를 호출할 수 있습니다. - DLMain 입구점 함수에서 지연 불러오는 함수를 호출하지 말아야 합니다.(프로그램 충돌이 발생할 수 있음)
사용:
- 코드의 작성과 정상적으로 동일한 - DLL 링크를 사용하여 암시적 링크 선택 - 설정/DELAYLOAD 및/DELAY 링크 스위치이 두 개는 #pragma comment(...)를 사용할 수 없습니다.를 참고하십시오.
1.   --Linker--Input--Delay Load DLLs--            DLL,  ,     。
2.   --Linker--Advanced--Delay Loaded DLL --      Support Unload(/DELAY:UNLOAD)。

이렇게 설정한 후 DLL을 로드하는 것은 DLL 요소를 사용할 때입니다.사용할 때, 어디에서 불러왔는지 쉽게 알 수 있도록 DLL이 불러왔는지 판단하는 함수를 추가했습니다.아래와 같다
BOOL IsModuleLoaded(PCTSTR pszModuleName)
{
    HMODULE hmod = GetModuleHandle(pszModuleName);
    if(hmod==NULL)
        return FALSE;
    return TRUE;
}

- 여기서 pszModuleName 매개변수는 dll의 이름입니다(.dll 제외). -dll의 함수를 처음 호출하기 전후에 IsModuleLoaded는 각각 FALSE와 TRUE를 되돌려줍니다.

좋은 웹페이지 즐겨찾기