[dll] DLL이란 무엇입니까?

이것은 매우 멍청한 질문 일 수 있지만, 오늘날의 웹 앱 개발 세계에서 많은 프로그래머는 dll을 많이 다룰 필요가 없으므로 자신의 목적에 대해 배우지 않아도됩니다.

그래서 dll은 무엇입니까?

  1. 그것은 무엇을 위해 사용됩니까?
  2. 어떻게 작동합니까?
  3. 어떻게 만드나요?
  4. 어떤 상황에서 적절한 것을 만들고 있습니까?

나는 dll이 함수 라이브러리를 저장하는 데 사용된다는 말을 들었지만 그 이상으로는 많이 알지 못합니다. 여기 누군가가 나를 깨달아 마침내 Windows 디렉토리의 모든 .dll 파일이 무엇을하는지 궁금해하는 것을 멈출 수 있기를 바랍니다.



답변

DLL은 동적 링크 라이브러리입니다. 여러 응용 프로그램 (또는 기타 라이브러리 / 모듈)에서 사용할 수있는 코드 및 / 또는 데이터 모음입니다.

예를 들어 파일을 처리하는 일반적인 방법, GUI 구성 요소 작업 등을 라이브러리에서 사용할 수 있으므로 여러 응용 프로그램이 동일한 기능을 사용할 수 있습니다. 이렇게하면 동일한 항목을 여러 번 빌드해야 할 필요성이 줄어들뿐만 아니라 예를 들어 공통 대화 상자가 응용 프로그램간에 동일하게 유지됩니다.

라이브러리는 런타임에로드 될 수 있으므로 서로 다른 동시 애플리케이션간에 공유됩니다. 이를 동적 연결이라고합니다.

어떤 경우에는 라이브러리가 응용 프로그램 자체에 포함될 수 있습니다. 이를 정적 연결이라고합니다. 정적 연결은 서로 다른 응용 프로그램이 각각 동일한 DLL 복사본을로드하므로 유연성을 희생하면서 배포를 더 쉽게 만듭니다.

그러나 정적 링크는 항상 옵션이 아닙니다. 예를 들어 .NET 애플리케이션을 정적으로 연결할 수 없습니다. .NET 애플리케이션을 실행하려면 사용자에게 .NET 라이브러리가 있어야하며 라이브러리 (또는 .NET에서 호출되는 어셈블리)는 런타임에로드됩니다.

DLL은 응용 프로그램을 만드는 데 사용되는 것과 동일한 도구로 만들어집니다. 구체적인 세부 사항은 사용되는 도구에 따라 크게 달라집니다.


답변

DLL = 동적 링크 라이브러리

이름은 실제로 그들이 성취 한 것을 아주 잘 설명합니다.

도서관

특정 문제 도메인에 대한 코드를 단일 위치로 격리 할 수 ​​있습니다. 그런 다음 여러 응용 프로그램간에 공유하십시오. 라이브러리는 버그를 수정하거나 기능을 추가하기 위해 언제든지 다른 라이브러리로 교체 할 수 있습니다.

링크

라이브러리의 논리가 응용 프로그램으로 직접 컴파일되지 않도록 라이브러리를 응용 프로그램에 “연결”할 수 있습니다.

동적

라이브러리는 요청시로드 할 수 있습니다. 거대한 단일 EXE를 메모리에로드하는 대신 OS는 필요한 부분 만로드 할 수 있습니다. 또한 DLL이 애플리케이션간에 공유되는 경우 OS는 라이브러리로드 방법을 최적화하고 앱간에 공유 할 수 있습니다.


답변

DLL (동적 링크 라이브러리) 파일은 더 큰 프로그램이 잘 실행되도록 돕는 작은 “하위 프로그램”으로 설명 될 수 있습니다. 이들은 다양한 하드웨어 및 소프트웨어 리소스 (런타임 세션의 다양한 지점에서)를 “필요에 따라”기반으로 기본 실행 프로그램에 연결하는 수단을 제공합니다. 이렇게하면 프로그램이 처음 실행될 때 기본 실행 프로그램과 관련된 모든 작업을 컴퓨터의 RAM (랜덤 액세스 메모리)에로드 할 필요가 없습니다.

DLL이 전달하는 소프트웨어 리소스에는 프로그램을 계속 실행하는 데 실제로 필요하지 않은 다양한 프로그램 기능에 대한 코드가 포함되어 있습니다. 전혀 부를 수 있습니다. 프로그램이 처음 실행될 때 해당 기능 (그리고 주어진 프로그램에 대해 상당한 수의 기능이있을 수 있음)을 컴퓨터의 RAM에로드 한 다음 세션 내내 유지하는 것은 RAM 공간을 낭비하는 것입니다. 프리미엄.

주요 발전 :

DLL의 개발은 컴퓨팅의 주요 발전이었습니다. 그 이유는 프로그램이 처음로드 될 때 프로그램과 관련된 모든 작업 (거의 사용되지 않는 기능 포함)을 RAM에로드해야했기 때문입니다. 그 결과 컴퓨팅이 매우 비효율적이며 다양한 프로그램에서 속도가 느려졌습니다. 또한 RAM에 대한 부담 때문에 간단한 프로그램 몇 개를 실행하여 멀티 태스킹을하는 것도 매우 어려웠습니다.

고려 사항 :

DLL은 일반적으로 버전에 따라 다릅니다. 예를 들어 프로그램의 버전 1 (또는 경우에 따라 프로그래밍 언어)에서 잘 작동하는 것들은 버전 2에서 잘 작동하지 않을 수 있습니다. 일반적인 규칙은 이전 버전의 DLL이 작동하지 않는 경향이 있다는 것입니다. 새 버전에서는 잘 작동하지만 새 버전은 일반적으로 이전 버전의 프로그램이나 프로그래밍 언어와 잘 작동합니다.


답변

동적으로 연결된 라이브러리.

예를 들어, 다른 사람의 DLL을 응용 프로그램에로드 한 경우 여기에서 약간의 프로그래밍을 사용할 수 있습니다.

항상 “5”등으로 시작하는 난수를 생성하는 DLL을로드 할 수 있습니다.

프로그램에서 CrazyDLL.GenerateRandomNumbersSorta ()를 호출하면 번호가 반환됩니다.

실제 예를 들어, 4 개의 텍스트 상자를 결합한 DLL (IP 주소를 입력하는 데 사용함)이 있으며 256 개 미만의 숫자 만 자동으로 받아들이고 백 스페이스 키를 눌러 이전 텍스트 상자로 이동하는 것을 처리합니다.

해당 코드로 DLL을 만들었으며 이제 모든 코드를 반복해서 복제하지 않고도 해당 IP 주소 텍스트 상자 컬렉션을 더 많이 끌어서 놓기 만하면됩니다.

동일한 DLL에는 IP 주소를 16 진수 문자열 및 기타 유용한 코드로 변환하는 기능도 있습니다.


답변

에서 MSDN 라이브러리 :

DLL (동적 연결 라이브러리)은 다른 모듈 (응용 프로그램 또는 DLL)에서 사용할 수있는 함수와 데이터를 포함하는 모듈입니다.


답변

DLL = 동적 로드 링크 라이브러리. 말씀하신대로 기본적으로 함수, C ++ 클래스 및 / 또는 전역 변수의 모음입니다. DLL을 정적으로 (예 : 프로그램이 시작될 때 OS가 자동으로로드 함) 또는 동적 (프로그램이 명시 적으로로드 함)으로로드 할 수 있으며, 이때 DLL 내부의 기능과 항목을 프로그램에서 사용할 수 있습니다.

하나를 만드는 것은 main()함수 가 필요하지 않다는 점을 제외하면 EXE를 만드는 것과 비슷 합니다. 링커에게 EXE가 아닌 DLL을 생성하도록 지시하는 링커 지시문이 있습니다.

이 작업을 수행하려는 주된 이유는 코드를 각 코드에 연결하는 대신 한 위치에 일부 코드를 캡슐화하고 여러 exe에서 사용하는 것입니다.

다소 역사적인 이유는 일부 코드가 물리적으로 다른 파일에 있기 때문에 exe가 더 작을 수 있기 때문입니다. 이것은 exe가 메모리에서 차지하는 공간이 더 적을 수 있음을 의미합니다. 최신 시스템에서는 Windows Mobile에서는 여전히 문제가 될 수 있지만 예전보다 덜 문제가됩니다.


답변