.NET은 "모든 COM 밑에 있습니까?"



Answers

CLR의 기본 구현에 대해 이야기하고 있다고 생각합니다. 내 이해에서, 그는 COM과 .NET 세계의 상호 작용에 대해 이야기하지 않습니다. 그는 단지 C ++과 COM을 런타임의 구현에 사용했다고 말한 것입니다.

COM / ATL / ActiveX와 전혀 관련이없는 .NET CLI 호환 C ++ 어셈블리를 작성할 수 있다는 가정하에있었습니다.

예, C ++ / CLI를 사용하여 COM과는 아무런 관련이없는 순전히 MSIL 어셈블리를 만들 수 있습니다.

Question

저는 수년 동안 .NET 개발에서 Juval Lowy의 가르침과 지침을 존경했습니다. 그는 또한 저의 가장 좋아하는 책 중 하나 인 Programming .NET Components를 썼습니다.

그러나 최근 DotNet Rocks Podcast (2010 년 1 월)에서 WCF / COM 및 .NET에 대한 토론에서 그는 다음과 같이 크게 놀랐습니다.

Juval Löwy : ..... .NET에서 모든 클래스는 COM 객체입니다. 우리는 그것을 압니다. 사실, COM보다 훨씬 많은 것을 가지고 있습니다. 왜냐하면 우리는 자식 컴파일을 가지고 있기 때문에, 가비지 컬렉션을 가지고 있고, 보안 스택을 가지고 있습니다.

Carl Franklin : 글쎄, 당신은 분명히해야합니다. 모든 객체는 COM 객체가 아닙니다. 모든 개체에는 COM 개체의 기능이 있지만 .NET Framework는 COM 라이브러리가 아닙니다.

Juval Löwy : 아니, 아니. 우선 .NET은 실제로 COM 위에 구축됩니다. 그것은 모두 밑에있는 COM입니다.

그런 다음 Carl Franklin이이 설명에 대한 설명을 요구 한 후에 다음을 수행합니다.

Carl Franklin : 네, 알겠습니다. 내 질문은 .NET에서 COM을 기반으로 작성된 것입니까?

Juval Löwy : 물론, 모든 COM은 밑에 있습니다.

Carl Franklin : 아니요 . 얽혀 있고 꼭 필요한 것은 사실입니다.하지만 .NET 객체를 새로 만들면 COM 객체를 만들지 않을 것입니다.

Juval Löwy : 당신은 .NET 객체를 만들고 있습니다 만, 제가 말하는 것은 .NET이 밑에 구축되어 있다는 것입니다. 그것은 모두 C ++과 COM입니다.

Carl Franklin : C ++이지만 COM 인터페이스를 통해 COM 객체를 등록하지 않습니다. 당신이 구체적으로 그렇게하지 않는 한 모든 것들은 아닙니다.

Juval Löwy : 하지만 그 중 일부는 COM을 밑에서 사용하고 있지만, 그 부분은 요점입니다. 그것이 어떻게 만들어 졌는지 잊어 버려라.

이 의견을 어떻게 읽습니까?

시스템 어셈블리 중 일부가 관리되지 않는 C ++로 작성되었다는 것을 이해하고 확인했지만 (해당 어셈블리가 "모든 COM 아래에있다") 말 할 수 있습니까?

COM / ATL / ActiveX와 전혀 관련이없는 .NET CLI 호환 C ++ 어셈블리를 작성할 수 있다는 가정하에있었습니다.

다음은 해당 Podcast의 PDF 사본 입니다. 7 페이지를 참조하십시오.




Dave Markle의 대답은 Jeff Richter가 C #을 통해 CLR 에서 말한 것을 상기시켜줍니다.

(21 장, CLR 호스팅 및 AppDomains)

.NET Framework는 Microsoft Windows를 기반으로 실행됩니다. 즉, .NET Framework는 Windows가 연결할 수있는 기술을 사용하여 작성해야합니다. 우선, 모든 관리되는 모듈 및 어셈블리 파일은 Windows PE (Portable Executable) 파일 형식을 사용해야하며 Windows EXE 파일 또는 DLL (동적 연결 라이브러리)이어야합니다.

CLR을 개발할 때 Microsoft는이를 DLL 내부에 포함 된 COM 서버로 구현했습니다. 즉, Microsoft는 CLR에 대한 표준 COM 인터페이스를 정의하고이 인터페이스와 COM 서버에 GUID를 할당했습니다. .NET Framework를 설치하면 CLR을 나타내는 COM 서버가 다른 COM 서버와 마찬가지로 Windows 레지스트리에 등록됩니다. 이 항목에 대한 자세한 내용은 .NET Framework SDK와 함께 제공되는 MSCorEE.h C ++ 헤더 파일을 참조하십시오. 이 헤더 파일은 GUID 및 관리되지 않는 ICLRRuntimeHost 인터페이스 정의를 정의합니다.

나는 이것이 거의 Juval의 의견을 설명하는 것에 가깝다고 생각합니다.

Alex DeLarge는 CLR 자체와 기본 클래스 라이브러리 어셈블리의 구현간에 차이점이 있다는 또 다른 대답에 좋은 점을 제시합니다.

BCL 어셈블리 (Juval : "모든 clss는 COM 개체입니다.")와 응용 프로그램 어셈블리에 초점을 맞추고있었습니다. 따라서이 문제가 혼란의 원인이 될 수 있습니다.







Related



Tags

.net .net   c++ c++   com