Com 도 국제 최고급 도메인 이름입니다. Com, company 의 약어는 상용 웹 사이트를 나타내는 가장 일반적으로 사용되는 최상위 도메인 이름입니다.
[이 단락 편집 ]COM 구성 요소
COM 구성요소란 무엇입니까
COM 은 어셈블리 개체 모델의 약어입니다.
사용자는 어떤 소프트웨어 제품이 필요합니까? 이것은 객관식 질문이지만, 효율적이고 건장한 것은 분명히 선택할 것이다. 소프트웨어 개발자는 어떻게 해야 사용자의 요구를 충족시킬 수 있습니까? 응용 프로그램을 업그레이드할 때 이전 버전과의 이전 버전과의 이전 버전과의 호환성을 손상시키지 않도록 해야 합니다. 특정 운영 체제와 독립적으로 시스템 서비스를 확장할 필요가 있습니다. 객체 지향 프로그래밍은 분명히 혁명적인 변화이다. 객체 지향 설계 방법을 사용하면 해결할 문제를 다양한 범주로 쉽게 추상화하고 내부 동작을 숨기고 몇 가지 인터페이스만 제공할 수 있습니다. 하지만 이것이 우리의 문제를 완전히 해결하지는 못했습니다. 어제' 프로그래머' 잡지에서 지금이 후OO 시대라는 것을 봤는데, 그럼 OO 이후에는 어떤 일이 일어날까요? 구성 요소 지향적이어야 합니다.
뇌신은 방금' COM 기술 내막' 이라는 책을 다 읽고, 여러분이 이 책을 공부할 때 참고할 수 있도록 FAQ 를 정리했다.
이것은 처음 세 장을 포함한 첫 번째 부분입니다.
FAQ 1: COM 구성요소란 무엇입니까? [제 1 장]
FAQ2: 구성 요소는 ...? [제 1 장]
FAQ3: 인터페이스란 무엇입니까? [제 2 장]
FAQ4: 인터페이스의 역할은 무엇입니까? [제 2 장]
FAQ5: 내가 모르는 것은 무엇입니까? [제 3 장]
FAQ6:QueryInterface 의 역할은 무엇입니까? [제 3 장]
FAQ7:QueryInterface 함수의 구현 규칙은 무엇입니까? [제 3 장]
Faq 8: 쿼리 인터페이스는 어떻게 생겼습니까? [제 3 장]
FAQ9:QueryInterface 함수의 매개 변수 id 는 무엇입니까? [제 3 장]
FAQ 10: 언제 새 COM 구성 요소 버전을 만들어야 합니까? [제 3 장]
질문:
COM 구성요소란 무엇입니까?
대답:
COM 구성요소는 WIN32 동적 링크 라이브러리 (DLL) 또는 실행 파일 (EXE) 로 게시된 실행 코드로 구성됩니다.
COM 어셈블리는 com 사양에 따라 작성되었습니다.
COM 구성 요소는 작은 이진 실행 파일입니다.
COM 구성 요소는 응용 프로그램, 운영 체제 및 기타 구성 요소에 서비스를 제공할 수 있습니다.
사용자 정의 COM 구성 요소는 런타임 시 다른 구성 요소와 연결하여 응용 프로그램을 형성할 수 있습니다.
COM 구성요소는 응용 프로그램을 동적으로 삽입하거나 언로드할 수 있습니다.
COM 구성요소는 동적으로 연결되어야 합니다.
COM 어셈블리는 내부 구현 세부 사항을 숨기거나 캡슐화해야 합니다.
COM 구성 요소는 구현하는 언어를 숨겨야 합니다.
COM 구성 요소는 바이너리 형태로 게시해야 합니다.
COM 구성 요소는 기존 사용자를 방해하지 않고 업그레이드할 수 있어야 합니다.
COM 구성 요소는 네트워크에서 투명하게 재배치할 수 있습니다.
COM 구성 요소는 표준 방식으로 존재를 선언합니다.
질문:
이 구성 요소는 ...?
대답:
COM 구성 요소는 컴퓨터 언어가 아닙니다.
COM 구성 요소는 dll 이 아니라 dll 을 사용하여 구성 요소에 동적 링크를 제공하는 기능입니다.
COM 구성 요소는 API 함수 세트가 아닙니다.
COM 구성 요소는 클래스가 아닙니다.
질문:
인터페이스란 무엇입니까?
대답:
인터페이스는 서로 다른 두 객체 간의 연결을 제공합니다.
컴퓨터 프로그램은 프로그램의 다른 부분에 대한 인터페이스를 정의하는 함수 세트로 연결됩니다.
DLL 의 인터페이스는 출력 함수입니다.
C++ 클래스의 인터페이스는이 클래스의 멤버 함수 세트입니다.
COM 의 인터페이스는 구성 요소에 의해 구현되어 고객에게 제공되는 기능 세트입니다.
COM 에서 인터페이스는 구성 요소에서 구현하는 함수 주소인 함수 포인터 배열이 포함된 메모리 구조입니다.
질문:
인터페이스의 역할은 무엇입니까?
대답:
구성 요소의 경우 구성 요소를 연결하여 응용 프로그램을 형성하는 데 인터페이스가 필요합니다.
COM 에서 인터페이스는 모든 것입니다. 고객에게 구성 요소는 인터페이스 세트이며 고객은 인터페이스를 통해서만 구성 요소와 상호 작용할 수 있습니다.
이는 인터페이스가 외부 변화로부터 시스템을 보호할 수 있음을 의미합니다. 이것이 포장의 구현이다.
인터페이스 구현을 통해 사용자는 동일한 방식으로 서로 다른 구성 요소를 처리할 수 있습니다. 이것이 다태성의 구현이다.
질문:
인터페이스는 어떻게 이루어집니까?
대답:
COM 인터페이스는 C++ 에서 순수 추상 기본 클래스로 구현됩니다.
하나의 COM 구성 요소가 여러 인터페이스를 지원할 수 있습니다.
C++ 클래스는 다중 상속을 사용하여 다중 인터페이스를 지원하는 구성 요소를 구현할 수 있습니다.
구성 요소는 원하는 수의 인터페이스를 지원할 수 있습니다.
인터페이스는 변경되지 않아야 합니다. 구성 요소를 업그레이드할 때 기존 인터페이스를 수정하는 대신 새 인터페이스를 추가해야 합니다.
구현 인터페이스는 다양한 구현을 지원할 수 있도록 신중하게 설계해야 합니다.
질문:
내가 뭘 알아?
대답:
IUnKnown 은 인터페이스입니다.
모든 COM 인터페이스는 IUnKnown 을 상속합니다.
IUnKnown 은 WIN32 SDK 의 UNKNWN 헤더 파일에 정의되어 있습니다.
///I unknown 의 정의
인터페이스를 알 수 없습니다
{
가상 hresult _ _ stdcall 쿼리 인터페이스 (상수 IID & amp;; Iid, void * * PPV)= 0;;
가상 ulong _ _ stdcalladdref () = 0;
가상 ULONG _ _ stdcall Release()= 0;;
}
질문:
QueryInterface 의 역할은 무엇입니까?
대답:
쿼리 인터페이스는 고객이 구성 요소가 특정 인터페이스를 지원하는지 여부를 쿼리할 수 있는 IUnKnown 의 멤버 함수입니다.
QueryInterface 함수는 구성 요소가 지원하는 인터페이스에 대한 포인터를 반환합니다.
QueryInterface 함수가 구성 요소에서 지원하는 인터페이스를 찾지 못하면 반환 포인터가 null 입니다.
쿼리 인터페이스 함수는 if ... then ... else 문, 배열, 해시 테이블, 트리를 사용하여 구현할 수 있습니다.
QueryInterface 함수는 숫자가 아닌 HRESULT 구조를 반환하므로 case 문을 사용할 수 없습니다.
QueryInterface 는 또한 어셈블리 버전을 봉인하는 메커니즘입니다. 이 메커니즘을 사용하면 이전 버전과 새 버전의 구성 요소가 상호 운용될 수 있습니다.
질문:
QueryInterface 함수의 구현 규칙은 무엇입니까?
대답:
QueryInterface 가 반환한 IUnKnown 포인터는 항상 동일합니다.
고객이 인터페이스를 얻으면 항상 사용할 수 있습니다.
고객은 이미 보유하고 있는 인터페이스를 다시 이용할 수 있습니다.
고객은 시작 인터페이스로 돌아갈 수 있습니다.
하나의 인터페이스에서 특정 인터페이스를 사용할 수 있는 경우 모든 인터페이스에서 사용할 수 있습니다.
질문:
QueryInterface 함수의 매개 변수 id 는 무엇입니까?
대답:
구조, 인터페이스 식별자 구조입니다.
IID 는 고객이 필요로 하는 인터페이스를 결정합니다.
각 인터페이스에는 고유한 인터페이스 식별자가 있습니다. 따라서 IID 에 해당하는 인터페이스는 변경되지 않습니다.
인터페이스 IID 는 COM 구성 요소의 버전을 결정합니다.
인터페이스마다 서로 다른 버전의 인터페이스를 포함하여 서로 다른 id 가 있습니다.
질문:
언제 새 버전의 COM 구성 요소를 만들어야 합니까?
대답:
기존 인터페이스에 새 ID 를 지정할 때 다음 조건 중 하나 이상을 충족해야 합니다.
인터페이스의 기능 수가 변경될 때
인터페이스에서 기능의 순서가 변경되었습니다.
인터페이스에서 함수의 매개 변수가 변경되었습니다.
인터페이스에서 함수 매개 변수의 순서가 변경되었습니다.
인터페이스에서 함수의 매개 변수 유형이 변경되었습니다.
인터페이스에서 함수의 반환 값이 변경됩니다.
인터페이스에서 함수의 반환 값 유형이 변경되었습니다.
인터페이스에서 함수 매개변수의 의미가 변경됩니다.
인터페이스에서 기능의 의미가 변경되었습니다.
간단히 말해서, COM 은 응용 프로그램과 언어 간에 이진 코드를 즐길 수 있는 방법입니다. C++ 와 달리 소스 코드 재사용을 촉진합니다. ATL 이 좋은 예입니다. 소스 레벨 재사용은 좋지만 C++ 에서만 사용할 수 있습니다. 또한 코드의 지속적인 복사 및 재사용은 물론 이름 충돌의 가능성도 제기되어 프로젝트의 팽창과 비대화를 야기합니다.
Windows 는 dll 을 사용하여 바이너리 수준의 코드를 즐길 수 있습니다. 이것은 또한 Windows 프로그램을 실행하는 열쇠입니다. kernel32.dll, user32.dll 등을 재사용합니다. 그러나 dll 은 C 인터페이스용으로 작성되었으며 C 또는 C 호출 사양을 이해하는 언어에서만 사용할 수 있습니다. 프로그래밍 언어는 dll 자체가 아닌 코드 구현을 담당합니다. 이 경우 dll 사용이 제한됩니다.
MFC 는 또 다른 MFC 확장 dll 바이너리 * * * * 공유 메커니즘을 도입했습니다. 하지만 그 용도는 여전히 제한되어 있습니다. MFC 프로그램에서만 사용할 수 있습니다.
COM 은 바이너리 표준을 정의하여 이러한 문제를 해결합니다. 즉, COM 은 바이너리 모듈 (dll 및 exe) 을 지정된 구조와 일치하도록 컴파일해야 한다는 점을 명확하게 나타냅니다. 이 표준은 또한 메모리에서 COM 객체를 구성하는 방법을 명확하게 지정합니다. COM 정의 이진 표준도 C++ 의 명명 손질과 같은 모든 프로그래밍 언어와 독립적이어야 합니다. 이러한 조건이 충족되면 모든 프로그래밍 언어에서 쉽게 액세스할 수 있습니다. 컴파일러는 생성된 바이너리 코드와 표준 호환성을 담당합니다. 이렇게 하면 나중에 사람들이 이 바이너리 코드를 더 쉽게 사용할 수 있습니다.
메모리에서는 이러한 표준 형식의 COM 객체가 C++ 가상 함수에서 사용되는 경우가 많기 때문에 많은 COM 코드가 C++ 를 사용하는 이유입니다. 그러나 모듈을 작성하는 언어는 관련이 없다는 점을 기억하십시오. 생성된 바이너리 코드는 모든 언어에서 사용할 수 있기 때문입니다.
또한 COM 은 Win32 에만 국한되지 않습니다. 이론적으로 유닉스나 다른 운영 체제에 이식할 수 있다. 하지만 Windows 이외의 COM 에 대해서는 들어보지 못한 것 같습니다.
[이 단락 편집] com 영어 버전
1 은 * * * 동일 또는 동일, 즉 "* * * 동일, 상호, 함께" 를 의미합니다.
또한 col, cor, co, syn, sym, syl, syr 의 또 다른 수퍼테이블 * * * 과 상대방이 있습니다. Homo 시계는 똑같습니다. 시계가 동일하고 비슷하기 때문입니다. Iso 표 등.
의미를 강화하거나 확장하는 것을 의미합니다.
비슷한 접두사는 be, a, AC, af, en, em, col, cor 입니다.
Com- 과 con- 접두사는 "* * * 함께" 를 의미합니다. 연결, 합병, 전투 등.
영영사전에서 com 을 찾는다는 뜻에 따라, 그것이 주는 해석은 다음과 같다. Com 은 비즈니스 관련 의미입니다.
내가 나중에 인터넷에서 찾은 어원의 설명에 따르면, com 은 * * * 의 뜻이며, co 와 con 의 동의어이다.