dll과 exe 파일의 정확한 차이점을 알고 싶습니다.
dll과 exe 파일의 정확한 차이점을 알고 싶습니다.
답변:
EXE :
DLL :
자세한 내용 : http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_EXE_and_a_DLL
참조 : http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
함수 를 통해 스레드가 시작되거나 중지 될 때 알림을받을 수 있습니다 .
나는 왜 모든 사람들이 .NET의 맥락에서이 질문에 대답하는지 모르겠습니다. 질문은 일반적인 질문이었고 어디에서도 .NET을 언급하지 않았습니다.
음, 주요 차이점은 다음과 같습니다.
EXE
DLL
DLL과 exe의 파일 형식은 본질적으로 동일합니다. Windows는 파일의 PE 헤더를 통해 DLL과 EXE의 차이점을 인식합니다. PE 헤더에 대한 자세한 내용은 MSDN의이 문서를 참조하십시오.
언급 할 수있는 구조와 관련하여 몇 가지 차이점이 더 있습니다.
Characteristics
멤버를 살펴볼 수 있습니다 . DLL의 경우 (0x2000) 플래그가 켜져 있습니다. EXE의 경우 (0x2) 플래그입니다.IMAGE_FILE_HEADER
IMAGE_NT_HEADERS
IMAGE_FILE_DLL
IMAGE_FILE_EXECUTABLE_IMAGE
IMAGE_OPTIONAL_HEADER
)에는 ImageBase
구성원이 있습니다. PE가로드 될 것으로 가정하는 가상 주소를 지정합니다. 다른 주소에서로드되면 일부 포인터가 잘못된 메모리를 가리킬 수 있습니다. EXE 파일은 새 주소 공간에 가장 먼저로드되기 때문에 Windows 로더는 일정한로드 주소를 보장 할 수 있으며 일반적으로 0x00400000입니다. DLL에는 그 사치가 존재하지 않습니다. 동일한 프로세스에로드 된 두 개의 DLL 파일은 동일한 주소를 요청할 수 있습니다. 이것이 DLL에 일반적으로 자체 섹션에 상주하는 Base Relocation Directory라는 다른 데이터 디렉토리가있는 이유 .reloc
입니다. 이 디렉터리에는 올바른 메모리를 가리 키도록 다시 기반 / 패치해야하는 DLL의 위치 목록이 포함되어 있습니다. 대부분의 EXE 파일에는이 디렉토리가 없지만 일부 오래된 컴파일러에서 생성합니다.이 주제 @ MSDN 에 대한 자세한 내용을 읽을 수 있습니다 .
이 대답은 내가 생각했던 것보다 조금 더 자세했지만 자세히 읽었습니다.
DLL :
대부분의 경우 DLL 파일은 라이브러리 입니다. 두 가지 유형의 라이브러리, 동적 및 정적- 차이점에 대해 읽습니다 . DLL은 프로그램 의 일부 이지만 전체가 아니라는 것을 알려주는 동적 링크 라이브러리 를 의미합니다 . 하나 이상의 프로그램에 사용할 수있는 재사용 가능한 소프트웨어 구성 요소 ( 라이브러리 ) 로 만들어졌습니다 . 복사-붙여 넣기를 사용하여 많은 애플리케이션에서 라이브러리 소스 코드를 항상 사용할 수 있지만 DLL / 정적 라이브러리의 개념은 라이브러리의 코드를 업데이트하는 동시에 모든 애플리케이션을 다음을 사용하여 업데이트 할 수 있다는 것입니다. 그것은-컴파일하지 않고.
예 : Button 과 같은 Windows GUI 구성 요소를
만들고 있다고 가정 해보 십시오 . 대부분의 경우 작성한 코드는 복잡하지만 공통적 인 구성 요소 이기 때문에 재사용하고 싶을 것입니다 .-많은 응용 프로그램에서 사용하기를 원하지만 소스 코드를 제공하고 싶지 않습니다. 복사 할 수 없습니다. -모든 프로그램의 버튼에 대한 코드를 붙여 넣어 DL-Library (DLL) 를 생성하기로 결정합니다 .
이 "버튼" 라이브러리는 EXE 컷터 블이 실행하는 데 필요하며 , 버튼이 없으면 버튼을 만드는 방법을 모르기 때문에 실행되지 않고 대화하는 방법 만 있습니다.
마찬가지로 DLL은 프로그램의 일부일뿐 "프로세스" 를 만드는 데 필요한 정보가 없기 때문에 실행할 수 없습니다 .
EXE :
실행 파일은 프로그램 입니다. 프로세스 를 생성하는 방법 과 DLL과 대화하는 방법을 알고 있습니다 . 단추를 만들려면 DLL 이 필요 하며, 단추가 없으면 응용 프로그램이 실행되지 않습니다.-ERROR.
도움이 되었기를 바랍니다....
using SomeClassFromALibrary
해당 라이브러리가 DLL을 통해 프로젝트에 연결됩니까? 내가 올바르게 이해하고 있는지 확인하려고하는 것
DLL과 EXE는 모두 PE (Portable Executable) 형식입니다.
동적 링크 라이브러리 (DLL)는 라이브러리이므로 직접 실행할 수 없다. 실행하려고하면 진입 점 누락에 대한 오류가 표시됩니다. 실행하려면 진입 점 (주 함수)이 필요합니다. 진입 점은 모든 응용 프로그램 또는 exe 일 수 있습니다. DLL 바인딩은 런타임에 발생합니다. 이것이 "Dynamic Link"라이브러리라고 불리는 이유입니다.
실행 파일 (EXE)을 실행할 수있는 프로그램이다. 자체 진입 점이 있습니다. PE 헤더 내부의 플래그는 파일 유형 (파일 확장자와 무관)을 나타냅니다. PE 헤더에는 프로그램의 진입 점이있는 필드가 있습니다. DLL에서는 사용되지 않습니다 (또는 적어도 진입 점으로 사용되지 않음).
헤더 정보를 확인할 수 있는 많은 소프트웨어가 있습니다. 둘 다 다르게 작동하는 유일한 차이점은 아래 다이어그램에 표시된 것처럼 헤더의 비트입니다.
EXE 파일에는 단일 주 항목 만 있습니다. 즉, 시스템이 exe를 시작할 때 새 프로세스가 생성되고 DLL에는 많은 진입 점이 있으므로 응용 프로그램을 사용할 때 새 프로세스가 시작되지 않고 DLL을 재사용하고 버전을 지정할 수 있습니다. DLL은 다른 프로그램이 동일한 dll을 사용할 수 있으므로 저장 공간을 줄입니다.
.exe
하거나 .dll
중요하지 않음 을 의미 합니까? 그것들을 진정으로 구별하는 것은 헤더의 플래그입니다 .... 그래서 exe
GUI 상호 작용을 통해를 만들고 이름을으로 지정 .dll
했지만 수동으로 해당 플래그를 변경해도 여전히 실행 가능합니까?
두 가지 : 확장자와 파일에 저장된 헤더 플래그.
두 파일 모두 PE 파일입니다. 둘 다 똑같은 레이아웃을 포함합니다. DLL은 라이브러리이므로 실행할 수 없습니다. 실행하려고하면 진입 점 누락에 대한 오류가 발생합니다. EXE는 실행할 수있는 프로그램입니다. 진입 점이 있습니다. PE 헤더 내부의 플래그는 파일 유형 (파일 확장자와 무관)을 나타냅니다. PE 헤더에는 프로그램의 진입 점이있는 필드가 있습니다. DLL에서는 사용되지 않습니다 (또는 적어도 진입 점으로 사용되지 않음).
한 가지 사소한 차이점은 대부분의 경우 DLL 에 기호를 내보내는 내보내기 섹션 이 있다는 것입니다 . EXE는 라이브러리가 아니기 때문에 내보내기 섹션을 가져서는 안되지만 이러한 일이 발생하는 것을 막는 것은 없습니다. Win32 로더는 어느 쪽이든 상관하지 않습니다.
그 외에는 동일합니다. 요약하면, EXE는 실행 가능한 프로그램이고 DLL은 프로세스에로드 된 라이브러리이며 보안, 데이터베이스 액세스 등과 같은 유용한 기능을 포함합니다.
DLL 대 Exe
1) DLL 파일은 exe 파일 및 기타 dll 파일에서 사용할 수있는 동적 링크 라이브러리입니다.
EXE 파일은 OS에서 관리하는 별도의 프로세스에서 실행되는 실행 파일입니다.
2) DLL은 직접 실행 가능하지 않습니다. 프로그램 및 기타 DLL에서 계산 및 함수를 수행하기 위해 호출 할 수있는 함수가 포함 된 별도의 파일입니다.
EXE는 실행할 수있는 프로그램입니다. 예 : Windows 프로그램
3) 재사용 성
DLL : 다른 애플리케이션에 재사용 할 수 있습니다. 코더가 DLL 파일에있는 함수 및 프로 시저의 이름과 매개 변수를 알고있는 한.
EXE : 특정 목적으로 만.
4) DLL은 호출 응용 프로그램의 동일한 프로세스와 메모리 공간을 공유하는 반면
EXE는 별도의 프로세스와 메모리 공간을 만듭니다.
5)
DLL 사용 : 많은 응용 프로그램에서 사용하기를 원하지만 소스 코드를 제공하고 싶지는 않습니다. 모든 프로그램에서 버튼에 대한 코드를 복사하여 붙여 넣을 수 없으므로 DL을 생성하기로 결정합니다. 라이브러리 (DLL).
EXE : Windows Forms 응용 프로그램, 콘솔 응용 프로그램, WPF 응용 프로그램 및 Windows 서비스와 같은 프로젝트 템플릿으로 작업 할 때 컴파일 될 때 exe 어셈블리를 생성합니다.
6) 유사성 :
DLL과 EXE는 둘 다 Portable Executable 형식으로 정의 된 복잡한 중첩 구조를 가진 바이너리 파일이며 사용자가 편집 할 수 없습니다.
.exe는 프로그램입니다. .dll은 .exe (또는 다른 .dll)가 호출 할 수있는 라이브러리입니다.
sakthivignesh가 말하는 것은 하나의 .exe가 마치 라이브러리 인 것처럼 다른 .exe를 사용할 수 있다는 점에서 사실 일 수 있으며, 이는 일부 COM 구성 요소로 수행됩니다 (예 :). 이 경우 "슬레이브".exe는 별도의 프로그램 (엄격하게 말하면 별도의 시스템에서 실행되는 별도의 프로세스)이지만 다른 프로그램 / 구성 요소 / 무엇이든 요청을 수락하고 처리하는 프로그램입니다.
그러나 Program Files의 폴더에서 임의의 .exe 및 .dll을 선택하면 COM이 관련이 없을 가능성이 있습니다. 단지 프로그램과 동적으로 연결된 라이브러리 일뿐입니다.
프로그램은 Win32 API를 사용하여 LoadLibrary 및 GetProcAddress API 함수 IIRC를 사용하여 DLL을로드하고 사용할 수 있습니다. Win16에도 비슷한 기능이있었습니다.
COM은 여러면에서 DLL 아이디어의 발전으로 원래 OLE2의 기반으로 여겨 졌던 반면 .NET은 COM의 후손입니다. DLL은 Windows 1, IIRC부터 사용되었습니다. 원래는 메모리 사용을 최소화하기 위해 실행중인 여러 프로그램간에 바이너리 코드 (특히 시스템 API)를 공유하는 방법이었습니다.
EXE는 시스템에 일반 Win32 실행 파일로 표시됩니다. 진입 점은 .NET 런타임을 초기화하고 EXE에 포함 된 어셈블리를로드하고 실행하도록 지시하는 작은 로더를 나타냅니다. DLL은 시스템에 Win32 DLL로 표시되지만 진입 점이없는 경우가 많습니다. .NET 런타임은 포함 된 어셈블리에 대한 정보를 자체 헤더에 저장합니다.
dll은 재사용 가능한 함수의 모음이며 .exe는 이러한 함수를 호출 할 수있는 실행 파일입니다.
exe는 실행 가능한 프로그램이고 DLL은 프로그램에 의해 동적으로로드되고 실행될 수있는 파일입니다.
● .exe 및 dll은 어셈블리라고도하는 C # 코드의 컴파일 된 버전입니다.
● .exe는 독립 실행 형 실행 파일이므로 직접 실행할 수 있습니다.
● .dll은 재사용이 가능한 구성 요소로 직접 실행할 수 없으며 다른 프로그램에서 실행해야합니다.
간결한 답변을 찾는 분들을 위해
DLL에 진입 점이없고 EXE가 수행하는 DLL과 EXE의 주요 정확한 차이점입니다. C ++에 익숙하다면 빌드 EXE에는 main () 항목 함수가 있고 DLL에는 없습니다. :)