나는 항상 내 C # 코드에서 DLL을 참조하고 있지만 그것들은 내가 명확히하고 싶은 미스터리로 남아있다. 이것은 DLL에 관한 일종의 두뇌 덤프입니다.
DLL이 동적으로 연결된 라이브러리라는 것을 이해합니다. 즉, 다른 프로그램이 "기능"을 얻기 위해 런타임에이 라이브러리에 액세스 할 수 있음을 의미합니다. 그러나 Web.dll
및 Business.dll
( Web.dll
는 프런트 엔드 기능이며 Business.dll
형식 및 메서드에 대한 참조)가 있는 다음 ASP.NET 프로젝트를 고려하십시오 .
어떤 시점에서
Web.dll
동적으로 연결Business.dll
됩니까? Word 등을 사용할 때 겉보기에 작은 작업으로 인해 Windows HDD에서 많은 스 래싱이 발생하고 Word가 다른 DLL의 기능에서 동적으로 연결되고 있다고 생각합니까?1a. 또한 DLL (OS 또는 .NET 프레임 워크와 같은 일부 런타임 프레임 워크)을로드하고 링크하는 것은 무엇입니까?
1b. "연결"과정은 무엇입니까? 호환성 확인이 이루어 집니까? 동일한 메모리에로드 하시겠습니까? 실제로 연결이란 무엇을 의미합니까?
실제로 DLL에서 코드를 실행하는 것은 무엇입니까? 프로세서에 의해 실행됩니까 아니면 프로세서가 DLL 내부의 코드를 이해하기 전에 다른 변환 또는 컴파일 단계가 있습니까?
2a. C # .NET으로 빌드 된 DLL의 경우이를 실행하는 것은 무엇입니까? .NET 프레임 워크 또는 운영 체제 직접?
Linux의 DLL이 Windows 시스템에서 작동합니까 (존재하는 경우), 아니면 운영 체제에 따라 달라 집니까?
DLL은 특정 프레임 워크에 고유합니까? C # .NET을 사용하여 빌드 된 DLL을 예를 들어 Borland C ++로 빌드 된 DLL에서 사용할 수 있습니까?
4a. 4에 대한 답이 "아니오"이면 DLL의 요점은 무엇입니까? 다양한 프레임 워크가 링크 된 파일에 대해 고유 한 형식을 사용하지 않는 이유는 무엇입니까? 예를 들어, .NET에 내장 된 .exe는 .abc의 파일 유형이 코드에 링크 될 수 있다는 것을 알고 있습니다.
Web.dll
/Business.dll
예제로 돌아가서 참조해야하는 클래스 유형의 고객을 가져Business.dll
옵니다Web.dll
. 이것은Business.dll
고객 클래스가 실제로 무엇인지에 대한 일종의 사양 을 포함하고 있음을 의미합니다 .Business.dll
예를 들어 Delphi에서 파일을 컴파일 했다면 C #이이를 이해하고 고객 클래스를 생성 할 수 있습니까? 아니면 일종의 헤더 정보 또는 "다른 Delphi DLL에서만 사용할 수 있습니다." ?5a. 방법에도 동일하게 적용됩니다.
CreateInvoice()
DLL에 메서드를 작성하고 C ++로 컴파일 한 다음 C #에서 액세스하여 실행할 수 있습니까? 이 작업을 중단하거나 허용하는 것은 무엇입니까?DLL 하이재킹의 주제에서 대체 (불량) DLL은 하이재킹되는 것과 동일한 메서드 서명 및 유형을 포함해야합니다. 원래 DLL에서 사용 가능한 메서드를 찾을 수 있다면 이것이 어렵지 않을 것이라고 생각합니다.
6a. 내 C # 프로그램에서 다른 DLL에 액세스 할 수 있는지 결정하는 것은 무엇입니까? 납치 된 DLL에 원본과 동일한 메서드 및 유형이 포함되어 있지만 다른 언어로 컴파일 된 경우 작동합니까?
DLL 가져 오기 및 DLL 등록이란 무엇입니까?