문제

어떻게 정확히 DLL 파일을 작동하는가?가 될 것으로 보인 끔찍한 그들의 많은지 그들은 알고 있거나 그들이 어떻게 작동합니다.

그래서,거래는 무엇인가요?

도움이 되었습니까?

해결책

DLL이란 무엇입니까?

동적 링크 라이브러리 (DLL) S는 EXE와 비슷하지만 직접 실행 가능하지는 않습니다. Linux/Unix의 .SO 파일과 유사합니다. 즉, DLL은 MS의 공유 라이브러리 구현입니다.

DLL은 EXE와 매우 흡사하여 파일 형식 자체가 동일합니다. EXE와 DLL은 모두 휴대용 실행 파일 (PE) 파일 형식을 기반으로합니다. DLL에는 COM 구성 요소 및 .NET 라이브러리도 포함 할 수도 있습니다.

DLL에는 무엇이 포함되어 있습니까?

DLL에는 EXE 또는 기타 DLL이 사용하는 함수, 클래스, 변수, UIS 및 리소스 (예 : 아이콘, 이미지, 파일 등)가 포함됩니다.

라이브러리 유형 :

사실상 모든 운영 체제에는 두 가지 유형의 라이브러리가 있습니다. 정적 라이브러리 및 동적 라이브러리. Windows에서 파일 확장자는 다음과 같습니다. 정적 라이브러리 (.lib) 및 동적 라이브러리 (.dll). 주요 차이점은 정적 라이브러리가 컴파일 시간에 실행 파일에 연결되어 있다는 것입니다. 동적 링크 된 라이브러리는 런타임까지 연결되지 않습니다.

정적 및 동적 라이브러리에 대한 자세한 내용 :

정적 라이브러리는 모듈 (EXE 또는 DLL) 내부에 직접 내장되어 있기 때문에 컴퓨터에서는 정적 라이브러리를 일반적으로 볼 수 없습니다. 동적 라이브러리는 독립형 파일입니다.

DLL은 언제든지 변경 될 수 있으며 EXE가 명시 적으로 DLL을로드 할 때만 런타임에만로드됩니다. 정적 라이브러리는 EXE 내에서 컴파일되면 변경할 수 없습니다. EXE 자체를 업데이트하지 않고 DLL을 개별적으로 업데이트 할 수 있습니다.

DLL로드 :

프로그램은 시작시, Win32 API LoadLibrary를 통해 또는 다른 DLL의 종속성 인 경우 DLL을로드합니다. 프로그램은 getProcadDress를 사용하여 기능을로드하거나로드 소스를로드하여 리소스를로드합니다.

추가 읽기 :

확인해주십시오 MSDN 또는 위키 백과 추가 읽기를 위해. 또한이 답변의 출처.

다른 팁

DLL이란 무엇입니까?

DLL 파일은 실행 가능한 코드 및 이미지 등과 같은 리소스를 포함 할 수있는 이진 파일입니다. 응용 프로그램과 달리 직접 실행할 수는 없지만 응용 프로그램은 필요할 때 (또는 시작 중에 한 번에 모두)로드됩니다.

그들은 중요합니까?

대부분의 응용 프로그램은 시작시 필요한 DLL 파일을로드합니다. 이들 중 하나가 발견되지 않으면 시스템은 프로세스를 전혀 시작할 수 없습니다.

DLL 파일에는 다른 DLL 파일이 필요할 수 있습니다

응용 프로그램에 DLL 파일이 필요한 것과 마찬가지로 DLL 파일은 다른 DLL 파일 자체에 의존 할 수 있습니다. 종속성 체인의 이러한 DLL 파일 중 하나를 찾을 수없는 경우 응용 프로그램이로드되지 않습니다. 이것은 의존성 워커 도구를 사용하여 쉽게 디버깅됩니다. 의존성 워커.

시스템 폴더에 너무 많은 것이 있습니다.

대부분의 시스템 기능은 코드 / 리소스 공유의 표준 형태이므로 DLL 파일 형식으로 사용자 프로그램에 노출됩니다. 각 기능은 다른 DLL 파일에서 별도로 유지되므로 필요한 DLL 파일 만로드하여 시스템의 메모리 제약 조건을 줄입니다.

설치된 응용 프로그램은 DLL 파일도 사용합니다

DLL 파일은 또한 위에서 설명한 바와 같이 물리적으로 기능을 분리하는 형태가됩니다. 좋은 응용 프로그램은 또한 DLL 파일이 절대적으로 필요할 때까지로드하지 않으려 고 노력하므로 메모리 요구 사항이 줄어 듭니다. 이로 인해 응용 프로그램이 많은 DLL 파일로 배송됩니다.

DLL 지옥

그러나 때때로 시스템 업그레이드는 공유 DLL 파일과 필요한 프로그램간에 버전 불일치가있을 때 종종 다른 프로그램을 중단합니다. 시스템 체크 포인트 및 DLL 캐시 등은이 문제를 해결하기위한 M $의 이니셔티브였습니다. .NET 플랫폼은이 문제에 전혀 직면하지 않을 수 있습니다.

DLL 파일 내부에 무엇이 있는지 어떻게 알 수 있습니까?

외부 도구를 사용해야합니다 덤프 빈 또는 DLL 파일 내부에 공개적으로 가시 함수 (수출이라고 함)가 포함 된 내용과 다른 DLL 파일과 해당 DLL 파일에서 내보내는이 DLL 파일의 내보내기를 표시하는 종속성 워커.

우리는 그것들을 어떻게 생성 / 사용합니까?

공급 업체의 프로그래밍 문서를 참조하십시오. C ++의 경우 참조하십시오 loadlibrary MSDN에서.

당신은 실행 파일을 사용하는 일부 기능을에서 찾을 수 있습니다.

는 경우에 당신은 라이브러리를 사용하는가 static, 링커 복사 오브젝트 코드를 이 함수에서 직접 라이브러리에 삽입합니다.

지금 이 파일은 그것을 실행한 모든 것을 가지고 있으며,그것은 필요,그래서 실행 loader 드 그것으로 메모리를 실행합니다.

는 경우 라이브러리 링커는 개체 코드를 삽입하지 않지만,오히려 그것을 삽입 stub 는 기본적으로 말한 이 함수에 위치한 이 DLL 이 위치에 있습니다.

지금 이 실행 실행,비트의 실행은 없(i.e 이 스텁)그래서 로더가를 통해 실행 고정 없는 스텁.후에만 모든 스텁 해결되었습니다 실행 실행할 수 있습니다.

이 방법이 작동되는지 확인하기 위해 삭제하거나 이름을 바꾸 DLL 방법과 로더는 것을 보고 누락 오류를 실행하려고 할 때 성능을 크게 향상시킵니다.

따라서 이름 동적 링크 라이브러리, 의 연결 프로세스 수행되는 동적으로 실행된 시간에 의해 실행됩니다.

중 하나는 최종하는 경우,유지에 대한 링크를 DLL 다음 명세서가 삽입됩 링커에 의해하지만,Windows 여전히 제공 Getprocaddress 에 API 수 있는 로드하는 실행하여 DLL 기능은 항목이 점 긴 후 실행이 시작되었습니다.

DLLS (동적 링크 라이브러리) 및 SLS (UNIX에 해당하는 공유 라이브러리)는로드 시간에 실행 파일에 동적으로 연결될 수있는 실행 파일 코드의 라이브러리 일뿐입니다.

정적 라이브러리는 컴파일 시간에 실행 파일에 삽입되며 해당 지점에서 고정됩니다. 실행 파일의 크기를 증가시키고 공유 할 수 없습니다.

동적 라이브러리에는 다음과 같은 장점이 있습니다.

1/ 그들은 컴파일 시간이 아닌 실행 시간에로드되므로 실행 파일과 독립적으로 업데이트 할 수 있습니다 (Windows에서 볼 수있는 모든 멋진 창문과 대화 상자는 DLL에서 나옵니다. 다시 작성해야합니다).

2/ 독립적이기 때문에 코드는 여러 실행 파일에서 공유 할 수 있습니다. 이는 단일 DLL이있는 100 앱을 실행하는 경우 메모리에 DLL 사본이 하나만있을 수 있으므로 메모리를 저장합니다.

그들의 주요 단점은 Advantage #1입니다. DLL을 독립적으로 변경하면 응용 프로그램이 응용 프로그램 작업을 중지하거나 기괴한 방식으로 행동을 시작할 수 있습니다. DLL 버전화는 창에서 잘 관리되지 않는 경향이 있으며, 이는 기이하게 이름이 지정된 "DLL Hell"으로 이어집니다.

DLL 파일에는 an이 포함됩니다 수출 테이블 이것은 호출 프로그램에서 찾을 수있는 기호 목록입니다. 기호는 일반적으로 다음과 같은 기능입니다 C 전화 컨벤션 (__stcall). 내보내기 테이블에는 기능의 주소도 포함되어 있습니다.

이 정보를 사용하면 호출 프로그램이 컴파일 시간에 DLL에 액세스 할 수 없더라도 DLL 내의 함수를 호출 할 수 있습니다.

동적 링크 라이브러리 소개 더 많은 정보가 있습니다.

http://support.microsoft.com/kb/815065

DLL은 동시에 둘 이상의 프로그램에서 사용할 수있는 코드 및 데이터를 포함하는 라이브러리입니다. 예를 들어, Windows 운영 체제에서 COMDLG32 DLL은 일반적인 대화 상자 관련 기능을 수행합니다. 따라서 각 프로그램은이 DLL에 포함 된 기능을 사용하여 열린 대화 상자를 구현할 수 있습니다. 이를 통해 코드 재사용 및 효율적인 메모리 사용을 촉진하는 데 도움이됩니다.

DLL을 사용하면 프로그램을 별도의 구성 요소로 모듈화 할 수 있습니다. 예를 들어, 회계 프로그램은 모듈에 의해 판매 될 수 있습니다. 해당 모듈이 설치된 경우 각 모듈을 실행 시간에 기본 프로그램에로드 할 수 있습니다. 모듈은 별도이므로 프로그램의로드 시간이 더 빠르며 해당 기능이 요청 될 때만 모듈이로드됩니다.

또한 프로그램의 다른 부분에 영향을 미치지 않으면 서 각 모듈에 업데이트를 쉽게 적용 할 수 있습니다. 예를 들어, 급여 프로그램이 있고 매년 세율이 변경 될 수 있습니다. 이러한 변경 사항이 DLL로 격리되면 전체 프로그램을 다시 빌드하거나 설치하지 않고도 업데이트를 적용 할 수 있습니다.

http://en.wikipedia.org/wiki/dynamic-link_library

DLL은 파일 확장자이며 Windows 프로그램의 여러 코드 및 절차를 보유하는 데 사용되는 "Dynamic Link Library"파일 형식으로 알려져 있습니다. 소프트웨어 및 게임은 DLL 파일의 기반에서 실행됩니다. DLL 파일은 여러 응용 프로그램이 동시에 정보를 사용할 수 있도록 작성되었습니다.

DLL 파일에 대한 자세한 정보를 얻거나 오류에 직면하려면 다음 게시물을 읽으십시오.https://www.bouncegeek.com/fix-dll-errors-windows-586985/

DLL (Dynamic Link Libraries)에는 하나 이상의 응용 프로그램 또는 서비스가 사용하는 리소스가 포함되어 있습니다. 클래스, 아이콘, 문자열, 객체, 인터페이스 및 UI를 제외한 개발자가 저장 해야하는 거의 모든 것을 포함 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top