2 Agosto 2019

loadlibrary 예제

로드 타임및 런타임 동적 연결 모두에서 동일한 DLL을 사용할 수 있습니다. 다음 예제에서는 LoadLibrary 함수를 사용하여 Myputs DLL에 대한 핸들을 가져옵니다(간단한 동적 링크 라이브러리 만들기 참조). LoadLibrary가 성공하면 프로그램은 GetProcAddress 함수에서 반환된 핸들을 사용하여 DLL의 myPuts 함수의 주소를 가져옵니다. DLL 함수를 호출한 후 프로그램은 FreeLibrary 함수를 호출하여 DLL을 언로드합니다. shrlibsample.h 헤더 파일에는 헤더 파일인 shrhelp.h가 포함됩니다. shrhelp.h가 다른 폴더에 있는 경우(예: c:work) `includepath` 옵션을 사용하여 MATLAB에서 파일을 찾을 위치를 알려줍니다. Windows Server 2003 및 Windows XP: Visual C++ 컴파일러는 스레드 로컬 변수를 선언할 수 있는 구문을 지원합니다. DLL에서 이 구문을 사용하는 경우 Windows Vista 이전에 Windows 버전에서 LoadLibrary를 사용하여 DLL을 명시적으로 로드할 수 없습니다. DLL이 명시적으로 로드되는 경우 _declspec(스레드) 대신 스레드 로컬 저장소 함수를 사용해야 합니다. 예를 들어 동적 링크 라이브러리에서 스레드 로컬 저장소 사용을 참조하십시오. LoadLibrary는 프로세스의 주소 공간에 라이브러리 모듈을 로드하고 GetProcAddress에서 DLL 함수의 주소를 가져오는 데 사용할 수 있는 핸들을 반환하는 데 사용할 수 있습니다.

LoadLibrary는 다른 실행 모듈을 로드하는 데 사용할 수도 있습니다. 예를 들어 함수는 FindResource 또는 LoadResource에서 사용할 수 있는 핸들을 얻기 위해 .exe 파일을 지정할 수 있습니다. 그러나 .exe 파일을 실행 하려면 LoadLibrary를 사용 하지 마십시오. 대신 CreateProcess 함수를 사용합니다. MATLAB은 libname의 이름 부분을 추출하여 다른 공유 라이브러리 함수에서 라이브러리를 식별합니다. 예를 들어 calllib 함수를 호출할 때 라이브러리 인수 이름에 경로 또는 파일 확장명을 포함하지 마십시오. 모듈 핸들은 전역 또는 상속할 수 없습니다. 한 프로세스에 의한 LoadLibrary 호출은 GetProcAddress 호출과 같은 다른 프로세스에서 사용할 수 있는 핸들을 생성하지 않습니다. 다른 프로세스는 GetProcAddress를 호출하기 전에 모듈에 대한 LoadLibrary를 직접 호출해야 합니다. 이 예제에서는 MATLAB shrlibsample 라이브러리에서 addMixedTypes 함수 이름을 별칭 이름, addType으로 바꾸는 방법을 보여 주며 있습니다. 별칭 이름을 정의하려면 프로토타입 파일을 만든 다음 프로토타입 파일을 헤더 파일로 사용하여 라이브러리를 로드합니다.

이 예제에서는 런타임과 로드 타임 동적 연결 간의 중요한 차이점을 보여 줍니다. DLL을 사용할 수 없는 경우 로드 타임 동적 연결을 사용하는 응용 프로그램은 단순히 종료해야 합니다.

Contact us

Get in touch with us!