인터페이스 디자인 규칙
이 섹션에서는 인터페이스 디자인 규칙 및 지침에 대한 간단한 요약을 제공합니다. 이러한 규칙 중 일부는 COM 아키텍처와 관련이 있지만 다른 규칙은 인터페이스 디자인 언어 MIDL에 의해 적용되는 제한 사항입니다. COM 인터페이스 디자인에 대한 자세한 내용은 IDL 파일 분석을 참조하세요.
정의에 따르면 개체는 IUnknown 인터페이스 또는 IUnknown에서 파생된 인터페이스를 구현하지 않는 한 COM 개체가 아닙니다. 또한 다음 규칙은 COM 개체에 구현된 모든 인터페이스에 적용됩니다.
- IID(고유 인터페이스 식별자)가 있어야 합니다.
- 변경할 수 없어야 합니다. 만들어지고 게시되면 정의의 일부가 변경되지 않을 수 있습니다.
- 원격 처리를 처리하는 시스템의 일부가 RPC 오류를 보고할 수 있도록 모든 인터페이스 메서드는 HRESULT 값을 반환해야 합니다.
- 인터페이스 메서드의 모든 문자열 매개 변수는 유니코드여야 합니다.
- 데이터 형식을 원격으로 사용할 수 있어야 합니다. 데이터 형식을 원격 가능 형식으로 변환할 수 없는 경우 사용자 고유의 마샬링 및 구분 해제 루틴을 만들어야 합니다. 또한 LPVOID 또는 void *는 원격 컴퓨터에 아무런 의미가 없습니다. 필요한 경우 IUnknown에 대한 포인터를 사용합니다.
참고
MIDL의 현재 구현은 함수 오버로드 또는 여러 상속을 처리하지 않습니다.
기타 인터페이스 디자인 고려 사항
데이터에 대한 포인터를 매우 신중하게 사용합니다. 호출되는 프로세스의 주소 공간에서 데이터를 다시 만들려면 RPC 런타임에서 데이터의 정확한 크기를 알고 있어야 합니다. 예를 들어 CHAR * 매개 변수가 단일 문자가 아닌 문자 버퍼를 가리키는 경우 데이터를 올바르게 다시 만들 수 없습니다. MIDL에서 사용할 수 있는 구문을 사용하여 형식 정의로 표시되는 데이터 구조를 정확하게 설명합니다.
초기화는 배열 및 구조에 포함되고 프로세스 경계를 넘어 전달되는 포인터에 필수적입니다. 초기화되지 않은 포인터는 동일한 프로세스 공간의 프로그램에 전달될 때 작동할 수 있지만 프록시 및 스텁은 모든 포인터가 유효한 주소로 초기화되거나 null인 것으로 가정합니다.
포인터 별칭을 지정하는 경우 주의해야 합니다(포인터가 동일한 메모리 부분을 가리키도록 허용). 별칭이 의도적인 경우 IDL 파일에서 이러한 포인터를 별칭으로 선언해야 합니다. 비보정으로 선언된 포인터는 서로 별칭을 지정해서는 안 됩니다.
메모리를 할당하고 해제하는 방법에 주의하세요. 할당 특성을 사용하여 COM 개체에 out-of-process 호출 중에 생성된 데이터 구조를 해제하지 않도록 명시적으로 지시하지 않는 한 호출이 완료되면 해당 구조가 삭제됩니다. 또한 이제 마샬링 및 마슬링 해제해야 하는 데이터 구조의 비효율적인 할당으로 인해 발생할 수 있는 파괴적인 오버헤드를 고려합니다.
마지막으로 , COM 정의 FACILITY_ITF 코드(0x0000 및 0x01FF 사이의 값이 예약됨)와 충돌하거나 동일한 값을 가진 다른 HRESULT 값과 충돌하는 오류 코드를 만들지 않도록 HRESULT 반환 값을 정의할 때 주의해야 합니다. 가능하면 유니버설 COM 성공 및 실패 반환 값을 사용하고 HRESULT가 아닌 out 매개 변수를 사용하여 함수 호출과 관련된 정보를 반환합니다.
자세한 내용은 아래 항목을 참조하세요.
관련 항목