다음을 통해 공유


동적 연결 라이브러리 만들기

DLL(동적 연결 라이브러리)을 만들려면 하나 이상의 소스 코드 파일과 함수를 내보내기 위한 링커 파일을 만들어야 합니다. DLL을 사용하는 애플리케이션에서 부하 시간 동적 연결을 사용하도록 허용하려는 경우 가져오기 라이브러리도 만들어야 합니다.

원본 파일 만들기

DLL의 원본 파일에는 내보낸 함수 및 데이터, 내부 함수 및 데이터, DLL에 대한 선택적 진입점 함수 가 포함됩니다. Windows 기반 DLL 만들기를 지원하는 모든 개발 도구를 사용할 수 있습니다.

다중 스레드 애플리케이션에서 DLL을 사용할 수 있는 경우 DLL을 "스레드로부터 안전하게" 만들어야 합니다. 데이터 손상을 방지하려면 DLL의 모든 글로벌 데이터에 대한 액세스를 동기화해야 합니다. 또한 스레드로부터 안전한 라이브러리와만 연결해야 합니다. 예를 들어 Microsoft Visual C++에는 스레드로부터 안전하지 않은 라이브러리와 스레드로부터 안전하지 않은 두 가지 C 런타임 라이브러리의 여러 버전이 포함되어 있습니다.

함수 내보내기

내보낼 DLL의 함수를 지정하는 방법은 개발에 사용하는 도구에 따라 달라집니다. 일부 컴파일러에서는 함수 선언에서 한정자를 사용하여 소스 코드에서 직접 함수를 내보낼 수 있습니다. 다른 경우에는 링커에 전달하는 파일에서 내보내기를 지정해야 합니다.

예를 들어 Visual C++를 사용하면 DLL 함수를 내보낼 수 있는 두 가지 방법이 있습니다. __declspec(dllexport) 한정자를 사용하거나 모듈 정의(.def) 파일을 사용합니다. __declspec(dllexport) 한정자를 사용하는 경우 파일을 사용할 .def 필요가 없습니다. 자세한 내용은 DLL에서 내보내기를 참조 하세요.

가져오기 라이브러리 만들기

가져오기 라이브러리(.lib) 파일에는 시스템이 런타임에 지정된 DLL 및 내보낸 DLL 함수를 찾을 수 있도록 내보낸 DLL 함수에 대한 외부 참조를 확인하기 위해 링커에 필요한 정보가 포함되어 있습니다. DLL을 빌드할 때 DLL에 대한 가져오기 라이브러리를 만들 수 있습니다.

자세한 내용은 가져오기 라이브러리 및 내보내기 파일 빌드를 참조하세요.

가져오기 라이브러리 사용

예를 들어 CreateWindow 함수를 호출하려면 코드를 가져오기 라이브러리User32.lib와 연결해야 합니다. 그 이유는 CreateWindow가 이름이 지정된 User32.dll시스템 DLL에 있으며 코드 User32.lib 에서 내보낸 함수에 대한 호출을 확인하는 데 사용되는 가져오기 라이브러리이기 때문 User32.dll 입니다. 링커는 각 함수 호출의 주소를 포함하는 테이블을 만듭니다. DLL의 함수에 대한 호출은 DLL이 로드될 때 수정됩니다. 시스템이 프로세스를 초기화하는 동안 프로세스는 해당 DLL에서 내보낸 함수에 따라 달라지므로 로드 User32.dll 되고 함수 주소 테이블의 항목을 업데이트합니다. CreateWindow에 대한 모든 호출은 .에서 User32.dll내보낸 함수를 호출합니다.

자세한 내용은 DLL에 실행 파일 연결을 참조 하세요.