다음을 통해 공유


object 특성

[object] 인터페이스 특성은 COM 인터페이스를 식별합니다. ( [object] 특성을 포함하지 않는 인터페이스 특성 목록은 DCE RPC 인터페이스를 나타냅니다.)

[ 
    object, 
    uuid(string-uuid)
    [ , interface-attribute-list] 
] 
interface interface-name : base-interface
{
...    
}

매개 변수

string-uuid

Uuidgen 유틸리티에서 생성된 UUID 문자열입니다. UUID 문자열을 따옴표로 묶을 수 있습니다.

interface-attribute-list

인터페이스 전체에 적용되는 기타 특성입니다.

interface-name

인터페이스의 이름입니다.

base-interface

이 인터페이스가 파생되는 COM 인터페이스입니다. 기본 인터페이스는 IUnknown, IDispatch 또는 IUnknown 또는 IDispatch에서 직접 또는 간접적으로 파생되는 다른 COM 인터페이스여야 합니다.

설명

COM 인터페이스의 인터페이스 특성 목록에 는 [uuid] 특성이 포함되어야 하지만 [version] 특성을 포함할 수는 없습니다.

기본적으로 MIDL 컴파일러를 사용하여 COM 인터페이스를 컴파일하면 프록시 DLL을 빌드하는 데 필요한 파일이 생성됩니다. 이 DLL에는 클라이언트 애플리케이션과 개체 서버 모두에서 사용자 지정 COM 인터페이스 사용을 지원하는 코드가 포함되어 있습니다. 그러나 COM 인터페이스의 인터페이스 특성 목록이 [local] 특성을 지정하는 경우 MIDL 컴파일러는 인터페이스 헤더 파일만 생성합니다.

MIDL 컴파일러는 COM 인터페이스에 대한 인터페이스 데이터 형식을 자동으로 생성합니다. 또는 인터페이스 키워드(keyword) typedef를 사용하여 인터페이스 데이터 형식을 명시적으로 정의할 수 있습니다. 그런 다음 인터페이스 사양은 함수 매개 변수 및 반환 값, 구조체공용 구조 체 멤버 및 기타 형식 선언에서 인터페이스 데이터 형식을 사용할 수 있습니다. 다음 예제에서는 자동으로 생성된 IStream 데이터 형식을 사용하는 것을 보여 줍니다.

[
    object, 
    uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
] 
interface IStream : IUnknown
{ 
    typedef IStream * LPSTREAM; 
    // Other interface definition statements.
}

COM 인터페이스에서 모든 인터페이스 멤버 함수는 가상 함수로 간주됩니다. 가상 함수에는 암시적 이 포인터가 첫 번째 매개 변수로 있습니다. 가상 함수 테이블에는 각 인터페이스 멤버 함수에 대한 항목이 포함되어 있습니다.

비[local] 개체 인터페이스 멤버 함수에는 HRESULT 또는 SCODE의 반환 값이 있어야 합니다. (이전 버전의 MIDL은 멤버 함수가 void를 반환하도록 허용했습니다. 그러나 MIDL 버전 3.0부터 void 를 반환하면 컴파일러 오류가 발생합니다.) 반환 값이 HRESULT 또는 SCODE이면 원격 호출 중에 예외가 생성되면 생성된 프록시가 예외를 catch하고 반환 값에 예외 코드를 반환합니다. 애플리케이션에서 원격 프로시저 호출 중에 발생하는 오류를 무시할 수 있는 경우 호출 후 반환 값을 확인하지 않고 HRESULT를 반환 형식으로 지정할 수 있습니다.

이전 애플리케이션을 다시 컴파일하는 경우 반환 형식을 변경하면 서버가 새로 도입된 결과를 클라이언트에 보낼 때 이전 버전과의 호환성 문제가 발생할 수 있습니다. 반환 형식을 변경하는 대신 [call_as] 특성으로 void를 반환하는 함수에 레이블을 지정하여 로컬 함수로 만들 수 있습니다. 그런 다음, 동일한 매개 변수를 사용하지만 반환 형식의 HRESULT를 사용하여 관련 원격 함수를 정의합니다. 로컬 함수는 필요한 경우 해당 HRESULT 값에 따라 예외를 발생할 수 있습니다.

MIDL 컴파일러 /osf 스위치를 사용하여 컴파일할 때는 [object] 특성을 사용할 수 없습니다.

[
    uuid(12345678-1234-1234-1234-123456789ABC), 
    object
] 
interface IMyInterface : IUnknown
{
    // Interface definition statements.
}

[
    uuid(87654321-1234-1234-1234-123456789ABC), 
    object, 
    local
] 
interface ILocalInterface : ISomeOldCOMInterface
{
    // Interface definition statements.
}

참고 항목

call_as

IDL(인터페이스 정의) 파일

iid_is

인터페이스

로컬

/osf

Typedef

uuid

버전