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 형식의 안전한 배열이어야 합니다.
매개 변수 목록은 쉼표로 구분된 목록이며 각 요소의 형식은 다음과 같습니다.
[특성]
형식은 선언된 형식 또는 기본 제공 형식이거나 모든 형식에 대한 포인터일 수 있습니다. 매개 변수의 특성은 다음과 같습니다.
-
interface-name
-
(구문 2) IDispatch 인터페이스로 선언할 인터페이스의 이름입니다.
설명
MIDL 컴파일러는 왼쪽에서 오른쪽으로 다음 매개 변수 순서를 허용합니다.
- 필수 매개 변수([defaultvalue] 또는 [선택 사항] 특성이 없는 매개 변수)
- [defaultvalue] 특성이 있거나 없는 선택적 매개 변수
- [optional] 특성이 있고 [defaultvalue] 특성이 없는 매개 변수
- [ lcid] 매개 변수(있는 경우)
- [ 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에 속하지 않습니다. 따라서 CreateStdDispatch 및 DispInvoke 를 사용하여 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);
}
참고 항목