dispinterface 특성

dispinterface 문은 IDispatch::Invoke를 호출할 수 있는 속성 및 메서드 집합을 정의합니다. dispinterface는 지원되는 메서드 및 속성 집합(구문 1)을 명시적으로 나열하거나 단일 인터페이스(구문 2)를 나열하여 정의할 수 있습니다.

[
    [attributes]
]
dispinterface dispinterface-name
{
    properties:
        property-list
    methods:
        method-list
};

[
  [attributes]
]
dispinterface dispinterface-name
{
    interface interface-name
};

매개 변수

attributes

전체 dispinterface에 적용되는 특성을 지정합니다. [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid][version]과 같은 특성이 허용됩니다.

dispinterface-name

dispinterface가 형식 라이브러리에서 알려진 이름입니다. 이 이름은 형식 라이브러리 내에서 고유해야 합니다.

property-list

(구문 1) 변수 형식으로 선언된 개체에서 지원하는 속성의 선택적 목록입니다. 메서드 목록에서 속성 함수를 선언하기 위한 간단한 형식입니다. 자세한 내용은 설명 섹션을 참조하세요.

method-list

(구문 1) dispinterface의 각 메서드 및 속성에 대한 함수 프로토타입으로 구성된 목록입니다. 다양한 함수 정의가 methlist에 표시할 수 있습니다. methlist의 함수는 다음과 같은 형식입니다.

[특성]returntype methname type paramname(params);

다음 특성은 dispinterface의 메서드에서 허용됩니다. [helpstring], [helpcontext], [propget], [propput], [propputref], [string], [vararg]. [vararg]를 지정한 경우 마지막 매개 변수는 VARIANT 형식의 안전한 배열이어야 합니다.

매개 변수 목록은 쉼표로 구분된 목록이며 각 요소의 형식은 다음과 같습니다.

[특성]

형식은 선언된 형식 또는 기본 제공 형식이거나 모든 형식에 대한 포인터일 수 있습니다. 매개 변수의 특성은 다음과 같습니다.

[in], [out], [optional], [string]

interface-name

(구문 2) IDispatch 인터페이스로 선언할 인터페이스의 이름입니다.

설명

MIDL 컴파일러는 왼쪽에서 오른쪽으로 다음 매개 변수 순서를 허용합니다.

  1. 필수 매개 변수([defaultvalue] 또는 [선택 사항] 특성이 없는 매개 변수)
  2. [defaultvalue] 특성이 있거나 없는 선택적 매개 변수
  3. [optional] 특성이 있고 [defaultvalue] 특성이 없는 매개 변수
  4. [ lcid] 매개 변수(있는 경우)
  5. [ retval] 매개 변수

메서드 함수는 [entry] 특성이 허용되지 않는다는 점을 제외하고 모듈에 대한 참조 페이지에 설명된 대로 정확하게 지정됩니다. STDOLE32에 유의하세요. TLB(STDOLE. dispinterface 는 IDispatch에서 상속되므로 16비트 시스템의 TLB)를 가져와야 합니다.

속성 또는 메서드 목록에서 속성을 선언할 수 있습니다. 속성 목록에서 속성을 선언해도 속성이 지원하는 액세스 유형(즉, get, put 또는 putref)은 표시되지 않습니다. put 또는 putref를 지원하지 않는 속성에 대해 [ readonly] 특성을 지정합니다. 메서드 목록에서 속성 함수를 선언하는 경우 하나의 속성에 대한 함수는 모두 동일한 식별자를 갖습니다.

첫 번째 구문을 사용하면 속성: 및 메서드: 태그가 필요합니다. 각 멤버에도 [ id] 특성이 필요합니다. 예:

properties: 
    [id(0)] int Value;    // Default property. 
methods: 
    [id(1)] HRESULT Show();

인터페이스 멤버와 달리 dispinterface 멤버는 REtval 특성을 사용하여 HRESULT 오류 코드 외에 값을 반환할 수 없습니다. IDispatch::Invoke가 LCID를 전달하기 때문에 [ lcid] 특성도 dispinterfaces에 대해 유효하지 않습니다. 그러나 이러한 특성을 사용하는 인터페이스를 다시 묶을 수 있습니다.

두 번째 구문을 사용하여 IDispatch를 지원하고 이전에 ODL 스크립트에서 선언된 인터페이스를 다음과 같이 IDispatch 인터페이스로 다시 선언할 수 있습니다.

dispinterface helloPro 
{ 
    interface hello; 
};

앞의 예제에서는 hello의 모든 멤버와 hello가 IDispatch를 지원하는 것으로 상속하는 모든 멤버를 선언합니다. 이 경우 이전에 HRESULT를 반환한 [lcid] 및 [retval] 멤버를 사용하여 hello를 선언한 경우 MkTypLib는 각 [lcid] 매개 변수 및 HRESULT 반환 형식을 제거하고 대신 반환 형식을 [retval] 매개 변수의 형식으로 표시합니다.

참고

Mktyplib.exe 도구는 사용되지 않습니다. 대신 MIDL 컴파일러를 사용합니다.

 

dispinterface의 속성과 메서드는 dispinterface의 VTBL에 속하지 않습니다. 따라서 CreateStdDispatchDispInvoke 를 사용하여 IDispatch::Invoke를 구현할 수 없습니다. dispinterface는 애플리케이션이 Automation을 통해 기존 비 VTBL 함수를 노출해야 하는 경우에 사용됩니다. 이러한 애플리케이션은 dispidMember 매개 변수를 검사하고 해당 함수를 직접 호출하여 IDispatch::Invoke를 구현할 수 있습니다.

[ 
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    version(1.0), 
    helpstring("Useful help string."), 
    helpcontext(2480)
] 
dispinterface MyDispatchObject 
{ 
    properties: 
        [id(1)] int x;    //An integer property named x 
        [id(2)] BSTR y;   //A string property named y 
    methods: 
        [id(3)] HRESULT show();    //No arguments, no result 
        [id(11)] int computeit(int inarg, double *outarg); 
}; 
 
[
    uuid(1e123456-1f3c-1069-996b-00dd010fe676)
] 
dispinterface MyObject 
{ 
    properties: 
    methods: 
        [id(1), propget, bindable, defaultbind, displaybind] long x(); 
 
        [id(1), propput, bindable, defaultbind, 
         displaybind] HRESULT x(long rhs); 
}

참고 항목

bindable

defaultbind

displaybind

helpcontext

helpfile

helpstring

숨겨진

in

인터페이스

TYPEFLAGS

ODL 파일 구문

ODL 파일 예제

MIDL을 사용하여 형식 라이브러리 생성

선택적

out

nonextensible

propget

propput

propputref

oleautomation

제한

문자열

uuid

vararg

버전