loadlibraryex 예제

Tempo de leitura: menos de 1 minuto

0 Flares Filament.io 0 Flares ×

로드 타임및 런타임 동적 연결 모두에서 동일한 DLL을 사용할 수 있습니다. 다음 예제에서는 LoadLibrary() 함수를 사용하여 Myputs DLL에 대한 핸들을 가져옵니다. LoadLibrary()가 성공하면 프로그램은 GetProcAddress() 함수에서 반환된 핸들을 사용하여 DLL의 myPuts 함수의 주소를 가져옵니다. DLL 함수를 호출한 후 프로그램은 FreeLibrary() 함수를 호출하여 DLL을 언로드합니다. 프로그램은 런타임 동적 연결을 사용하기 때문에 모듈을 DLL에 대한 가져오기 라이브러리와 연결할 필요가 없습니다. 다음 예제에서는 런타임과 로드 타임 동적 연결 간의 중요한 차이점을 보여 줍니다. DLL을 사용할 수 없는 경우 로드 타임 동적 연결을 사용하는 응용 프로그램은 단순히 종료해야 합니다. 그러나 런타임 동적 연결 예제는 오류에 응답할 수 있습니다. LoadLibrary는 프로세스의 주소 공간에 라이브러리 모듈을 로드하고 GetProcAddress에서 DLL 함수의 주소를 가져오는 데 사용할 수 있는 핸들을 반환하는 데 사용할 수 있습니다. LoadLibrary는 다른 실행 모듈을 로드하는 데 사용할 수도 있습니다. 예를 들어 함수는 FindResource 또는 LoadResource에서 사용할 수 있는 핸들을 얻기 위해 .exe 파일을 지정할 수 있습니다. 그러나 .exe 파일을 실행 하려면 LoadLibrary를 사용 하지 마십시오.

대신 CreateProcess 함수를 사용합니다. 모듈 핸들은 전역 또는 상속할 수 없습니다. 한 프로세스에 의한 LoadLibrary 호출은 GetProcAddress 호출과 같은 다른 프로세스에서 사용할 수 있는 핸들을 생성하지 않습니다. 다른 프로세스는 GetProcAddress를 호출하기 전에 모듈에 대한 LoadLibrary를 직접 호출해야 합니다. 프로파일 모드에서 종속성 워커와 같은 를 사용하여 이 가설을 테스트할 수 있습니다. 이렇게 하면 MyDll.dll의 종속성이 런타임에 어떻게 해결되는지 알 수 있습니다. 예를 들어 Lib2.dll이 C:Dir1Lib1.dll의 종속성인 경우 이 값으로 Lib1.dll을 로드하면 시스템이 C:Dir1에서만 Lib2.dll을 검색합니다. C:Dir1의 Lib2.dll과 DLL 검색 경로의 모든 디렉터리를 검색하려면 이 값을 LOAD_LIBRARY_DEFAULT_DIRS와 결합합니다. 내 의견으로는 LOAD_LIBRARY_AS_DATAFILE 플래그를 “제안”하는 위의 텍스트가 충분히 강하지 않습니다. 지정된 모듈이 호출 프로세스에 대해 아직 로드되지 않은 DLL인 경우 시스템은 DLL_PROCESS_ATTACH 값을 가진 DLL의 DllMain 함수를 호출합니다. DllMain이 TRUE를 반환하면 로드라이브러리는 핸들을 모듈에 반환합니다. DllMain이 FALSE를 반환하면 시스템은 프로세스 주소 공간에서 DLL을 언로드하고 LoadLibrary는 NULL을 반환합니다.

DllMain에서 로드 라이브러리를 호출하는 것은 안전하지 않습니다. 자세한 내용은 DllMain의 비고 섹션을 참조하십시오. 함수 주소가 유효한 경우 함수를 호출합니다. . 이제 이 문서의 주요 핵심을 가지고 있으므로 Windows 콘솔 응용 프로그램으로 컴파일된 짧은 샘플에서 이 방법을 살펴보겠습니다.

Os comentários foram encerrados, mas trackbacks e pingbacks estão abertos.