DLL 파일은 동적 링크 라이브러리 파일이며 프로그램 * * * 이 특수 작업을 수행하는 데 필요한 코드 및 기타 리소스를 즐길 수 있도록 하는 실행 파일입니다.
비교적 큰 응용 프로그램은 서로 협력하여 전체 소프트웨어 시스템의 작업을 완료하는 여러 모듈로 구성되어 있습니다. 일부 모듈의 기능은 좀 더 일반적이며 다른 소프트웨어 시스템을 구성할 때 계속 사용됩니다. 소프트웨어 시스템을 구성할 때 모든 모듈의 소스 코드를 전체 응용 프로그램 EXE 파일에 정적으로 컴파일하면 문제가 발생할 수 있습니다. 한 가지 단점은 응용 프로그램의 크기를 늘리고, 더 많은 디스크 공간을 차지하며, 프로그램을 실행할 때 더 많은 메모리 공간을 소비하여 시스템 자원을 낭비한다는 것입니다. 또 다른 단점은 대형 EXE 프로그램을 작성할 때 재구성을 수정할 때마다 모든 소스 코드를 컴파일하여 컴파일 프로세스의 복잡성을 가중시키고 단계적 단위 테스트에 불리하다는 점입니다.
Windows 시스템 플랫폼은 완전히 다른 보다 효율적인 프로그래밍 및 실행 환경을 제공합니다. 독립 실행형 프로그램 모듈을 작은 DLL (Dynamic Linkable Library) 파일로 만들고 개별적으로 컴파일하고 테스트할 수 있습니다. 런타임 시 EXE 프로그램이 이러한 DLL 모듈을 호출해야 메모리 공간에 마운트됩니다. 이 방법은 EXE 파일의 크기와 메모리 공간 요구 사항을 줄일 뿐만 아니라 여러 응용 프로그램에서 이러한 DLL 모듈을 동시에 사용할 수 있도록 합니다. Windows 는 몇 가지 주요 시스템 기능을 DLL 모듈로 구현했습니다.
일반적으로 DLL 은. DLL,. DRV,. FON,. SYS 및. EXE 확장자를 가진 많은 시스템 파일이 dll 이 될 수 있는 디스크 파일입니다. 런타임 시 호출 프로세스의 가상 공간에 로드되고 호출 프로세스의 일부가 되는 글로벌 데이터, 서비스 함수 및 리소스로 구성됩니다. 다른 DLL 과의 충돌이 없는 경우 이 파일은 일반적으로 프로세스 가상 공간의 동일한 주소에 매핑됩니다. DLL 모듈에는 외부 세계에 서비스를 제공하는 다양한 내보내기 함수가 포함되어 있습니다. DLL 은 자체 데이터 세그먼트를 가질 수 있지만 자체 스택은 없으며 이를 호출하는 응용 프로그램과 동일한 스택 모드를 사용합니다. DLL 에는 메모리에 인스턴스가 하나만 있습니다. DLL 은 코드 캡슐화를 실현했습니다. DLL 의 작성은 특정 프로그래밍 언어 및 컴파일러와 관련이 없습니다.
Win32 환경에서 각 프로세스는 자체 읽기/쓰기 글로벌 변수를 복제합니다. 다른 프로세스 * * * 와 메모리를 즐기려면 메모리 매핑 파일을 사용하거나 * * * 공유 데이터 세그먼트를 선언해야 합니다. DLL 모듈에 필요한 스택 메모리는 프로세스를 실행하는 스택에서 할당됩니다. Windows 는 DLL 모듈을 로드할 때 프로세스 함수 호출을 DLL 파일의 내보내기 함수와 일치시킵니다. Windows 운영 체제에서 DLL 에 대한 작업은 DLL 을 필요로 하는 프로세스의 가상 주소 공간에 매핑하는 것입니다. DLL 함수의 코드에서 만든 모든 객체 (변수 포함) 는 해당 객체를 호출하는 스레드 또는 프로세스에 의해 소유됩니다.
호출 방법:
1, 정적 호출 방법: 컴파일 시스템에서 DLL 로드 및 응용 프로그램 종료 시 DLL 언로드를 완료하는 코드입니다. (다른 프로그램에서 이 DLL 을 사용하는 경우, 모든 관련 프로그램이 해당 DLL 사용을 종료할 때까지 Windows 에서 DLL 에 대한 응용 프로그램 레코드에서 1 을 뺀 후 해제할 수 있습니다. 간단하고 실용적이지만 유연성이 부족하여 일반적인 요구 사항을 충족할 수 없습니다.
암시적 호출: 동적 연결 라이브러리를 생성할 때 생성된. LIB 파일을 응용 프로그램의 프로젝트에 추가해야 합니다. DLL 의 함수를 사용하려면 설명만 하면 됩니다. 암시적 호출에서는 LoadLibrary () 및 FreeLibrary () 를 호출할 필요가 없습니다.
프로그래머가 DLL 파일을 만들 때 링커는 이에 해당하는 LIB 가져오기 파일을 자동으로 생성합니다. 이 파일에는 각 DLL 내보내기 함수의 기호 이름과 선택적 식별 번호가 포함되어 있지만 실제 코드는 포함되어 있지 않습니다. LIB 파일은 DLL 의 대체 파일로 응용 프로그램 프로젝트에 컴파일됩니다.
프로그래머가 정적 링크를 통해 생성 응용 프로그램을 컴파일하는 경우 응용 프로그램의 호출 함수는 LIB 파일의 내보내기 기호와 일치하며 이러한 기호나 식별 번호는 생성된 EXE 파일에 입력됩니다. LIB 파일에도 해당 dl 파일 이름 (전체 경로 이름은 아님) 이 포함되어 있으며 링커가 EXE 파일 내부에 저장합니다.
응용 프로그램을 실행하는 동안 DLL 파일을 로드해야 하는 경우 Windows 는 이 정보를 기반으로 DLL 을 찾아 로드한 다음 기호 이름 또는 식별 번호를 통해 DLL 함수에 대한 동적 링크를 구현합니다. 응용프로그램에서 호출하는 모든 DLL 파일은 응용프로그램 EXE 파일이 로드될 때 메모리에 로드됩니다. 실행 파일은 DLL 출력 함수 정보가 포함된 입력 라이브러리 파일 (.LIB 파일) 에 연결됩니다. 운영 체제는 실행 파일을 사용할 때 DLL 을 로드합니다. 실행 프로그램은 함수 이름을 통해 DLL 의 출력 함수를 직접 호출합니다. 호출 메서드는 프로그램 내의 다른 함수와 동일합니다.
2, 동적 호출 방법: 프로그래머가 API 함수를 사용하여 DLL 을 로드 및 언로드하여 DLL 을 호출하는 목적을 달성합니다. 사용은 복잡하지만 메모리를 보다 효율적으로 사용할 수 있는 것은 대형 응용 프로그램을 작성할 때 중요한 방법입니다.
명시적 호출:
응용 프로그램에서 LoadLibrary 또는 MFC 제공 AfxLoadLibrary 를 사용하여 직접 만든 동적 연결 라이브러리를 명시적으로 불러오는 것을 말합니다. 동적 연결 라이브러리의 파일 이름은 위 두 함수의 매개 변수이며 GetProcAddress () 를 사용하여 가져올 함수를 가져옵니다. 그 이후로 이 응용 프로그램에서 사용자 정의한 함수를 사용하는 것처럼 이 도입 함수를 호출할 수 있습니다. 응용 프로그램을 종료하기 전에 FreeLibrary 또는 MFC 에서 제공하는 AfxFreeLibrary 를 사용하여 동적 연결 라이브러리를 해제해야 합니다. Win32 의 LoadLibary 함수를 직접 호출하고 DLL 의 경로를 인수로 지정합니다. LoadLibary 는 응용 프로그램이 GetProcAddress 함수를 호출할 때 사용하는 HINSTANCE 매개 변수를 반환합니다. GetProcAddress 함수는 기호 이름 또는 식별 번호를 DLL 내부 주소로 변환합니다. 프로그래머는 DLL 파일이 로드되거나 로드되지 않는 시기를 결정할 수 있으며, 명시적 링크는 런타임에 로드되는 DLL 파일을 결정할 수 있습니다. DLL 을 사용하는 프로그램은 사용하기 전에 DLL 을 로드 (LoadLibrary) 하여 DLL 모듈의 핸들을 얻은 다음 GetProcAddress 함수를 호출하여 출력 함수에 대한 포인터를 가져오고 종료하기 전에 DLL(FreeLibrary) 을 언로드해야 합니다.
DLL 이 메모리를 적게 차지하기 때문에, 편집을 잘하는 등 많은 컴퓨터 바이러스가 DLL 형식 파일
이기 때문이다동적 링크 라이브러리는 일반적으로 직접 실행하거나 메시지를 받을 수 없습니다. 이러한 파일은 실행 프로그램 또는 다른 DLL 에 의해 호출되어 작업을 완료할 수 있는 함수가 포함된 별도의 파일입니다. 다른 모듈이 동적 링크 라이브러리의 함수를 호출하는 경우에만 작동합니다.
AaBbCc 응답 시간 2008-05-20 10: 08
고발
Windows 운영 체제의 동적 링크 라이브러리 (프로그램에 필요한 함수 및 드라이버 포함), 자체 마스터 프로그램에 의해 직접 호출해야 하며, 대체라고 생각하거나 열 수 없습니다. 오류 프로그램을 통해 열면 파일이 손상될 수 있습니다. 파일이 손상되면 프로그램을 실행할 수 없는 오류가 발생할 수 있습니다. 이 파일을 만지지 않는 것이 좋습니다!
"마음" 5 세대 기계 계획 또는 수프