2009-03-27 12 views
18

.NET 구성 요소와 COM 구성 요소의 차이점은 무엇입니까? 때로는 .NET 구성 요소를 사용하여 프로젝트에 포함하고 때로는 COM 참조를 포함시킵니다. 뒤에있는 아이디어는 무엇입니까? 미리 감사드립니다..NET 구성 요소와 COM 구성 요소의 차이점

답변

12

.NET 구성 요소 (메모리 처리가 당신을 위해 수행)

COM 소프트웨어 구성 요소에 대한 인터페이스 표준 코드 관리됩니다. COM 구성 요소는 관리되지 않는 코드입니다 (메모리 처분은 참조 횟수를 사용하여 수행됩니다). here에서

:

어떻게

는 COM 및 .NET가 관련?

COM 및 .NET은 보완적인 개발 기술입니다. .NET 공용 언어 런타임은 COM과의 투명한 통합 인 양방향 을 제공합니다. 이 은 COM 및 .NET 응용 프로그램 및 구성 요소가 각 시스템의 기능을 사용할 수 있음을 의미합니다. 이렇게하면 COM 응용 프로그램에 대한 기존의 투자를 보호하고 은 제어 된 페이스로 .NET을 활용할 수 있습니다. COM 및 .NET은 비슷한 개의 결과를 얻을 수 있습니다. .NET Framework는보다 강력한 증거 기반 보안 모델, 자동 메모리 관리 및 네이티브 웹 서비스 지원을 포함하여 상당의 이점을 가진 개발자를 제공합니다. 새로운 개발의 경우 환경 및 서비스로 이라는 강력한 관리 런타임을 사용하므로 .NET 을 권장 기술로 사용하는 것이 좋습니다.

+1

정말 차이가 없습니다. .NET 언어로 작성된 COM 구성 요소를 가질 수도 있습니다. .NET 구성 요소와 COM 구성 요소는 상호 보완 적이 지 않으므로 그러한 질문은 정확하지 않습니다. –

+2

regasm을 사용하여 COM에서 .NET 구성 요소를 모두 사용할 수 있습니다. 그래도 여전히 .NET 구성 요소입니다. –

+1

@Mitch : 답변을 수정해야한다고 생각합니다. VB6에서는 메모리 카운팅을 자동으로 처리하기 위해 참조 카운팅을 사용하는 많은 COM 구성 요소가 작성됩니다. 그래서 COM == 관리되지 않는 대 .NET == 관리가 올바르지 않은 이유입니다. –

5

.NET 구성 요소는 CLR에서 실행되지만 COM 구성 요소는 본질적으로 기본 Windows DLL입니다.

.NET 구성 요소는 COM 구성 요소보다 훨씬 많은 메타 데이터를 노출합니다. 이 재 설계는 부품의 상호 운용성을 향상시키기 위해 부분적으로 수행되었습니다. 특히 .NET 구성 요소는 데이터 레이아웃 및 호출 규칙에 대한 플랫폼 별 가정을하지 않습니다.

Don Box을 참조하십시오.

+2

CLR은 실제로 COM을 사용하여 작성 되었습니까? 나는 많은 프레임 워크 라이브러리가 기존 COM 라이브러리를 감싸고 있지만 COM 라이브러리를 사용하는 실제 런타임 자체는 무엇인지 알고있다. – sipwiz

+0

@sipwiz 전체 [CoreCLR repo] (https://github.com/dotnet/coreclr)를 조사하지는 않았지만 아직 어떤 COM도 찾지 못했습니다. – jrh

+1

@jrh, 진술을 삭제했습니다. 그것은 2005 년에 읽은 CLR 내부에 대한 Don Box의 책을 기반으로했으며 더 이상 사본이 없습니다. 이 책은 .NET 초기 버전 (".NET Core"이전의 * long *)에 대해 작성된 것으로, 책이 인쇄되기 전에 일부 내용이 오래된 것 같습니다. .NET이 더 이상 COM 기반이 아니라고 말하면 충분합니다. – harpo

5

COM 구성 요소는 소프트웨어를 바이너리 수준에서 재사용 할 수 있도록 고안된 관리되지 않는 C++ 코드 구성 요소입니다. NET 구성 요소는 비슷합니다. 1) CLR 언어로 만들 수 있지만 COM 구성 요소는 C++로만 만들 수 있습니다. 2) 관리되는 런타임에서 실행되도록 설계되었습니다. 그것들은 필수품이라고 생각합니다. 차이는입니다.

편집 :

C++는 COM에서 가장 "자연"언어이지만 COM 구성 요소가 많은 언어로 만들 수 있습니다. 의견을 주셔서 감사합니다.

+3

이것은 사실이 아닙니다. COM 구성 요소는 C#이나 VB.Net –

+0

VB와 같이 C++, VB 및 .NET 언어와 같이 다양한 언어로 만들 수 있습니다. 5.0 일 이후에는 사용하지 않지만 사실 일 수 있습니다. 어떻게 VB는 일부 COM 함수에 대해 포인터 - 투 - 포인터 매개 변수를 처리 할 수 ​​있습니까? –

+1

divo 내가 연구했고 네 말이 맞아;) –

관련 문제