CreateDispTypeInfo 함수(oleauto.h)
IDispatch 구현에 사용할 간소화된 형식 정보를 만듭니다.
구문
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
매개 변수
pidata
이 형식 정보가 설명하는 인터페이스 설명입니다.
lcid
형식 정보에 사용되는 이름의 로캘 식별자입니다.
pptinfo
반환할 때 DispGetIDsOfNames 및 DispInvoke에서 사용할 형식 정보 구현에 대한 포인터입니다.
반환 값
이 함수는 이러한 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
인터페이스가 지원됩니다. |
|
인터페이스 설명 또는 LCID가 잘못되었습니다. |
|
메모리가 부족하여 작업을 완료할 수 없습니다. |
설명
CreateDispTypeInfo 및 노출되는 개체를 설명하는 INTERFACEDATA 구조를 사용하여 런타임에 형식 정보를 생성할 수 있습니다.
이 함수에서 반환되는 형식 정보는 주로 IDispatch 구현을 자동화하도록 설계되었습니다. CreateDispTypeInfo 는 형식 설명 인터페이스에 설명된 모든 형식 정보를 반환하지 않습니다. pidata 인수는 인터페이스에 대한 완전한 설명이 아닙니다. 도움말 정보, 주석, 선택적 매개 변수 및 다른 컨텍스트에서 유용한 기타 형식 정보는 포함되지 않습니다.
따라서 개체에 대한 형식 정보를 제공하는 권장 방법은 ODL(개체 설명 언어)을 사용하여 개체를 설명하고 MIDL(Microsoft Interface Definition Language) 컴파일러를 사용하여 개체 설명을 형식 라이브러리로 컴파일하는 것입니다.
형식 라이브러리의 형식 정보를 사용하려면 CreateDispTypeInfo 대신 LoadTypeLib 및 GetTypeInfoOfGuid 함수를 사용합니다. 자세한 내용은 설명 인터페이스를 입력합니다.
예제
다음 코드는 INTERFACEDATA에서 형식 정보를 만들어 CCalc 개체를 노출합니다.
static METHODDATA NEARDATA rgmdataCCalc[] =
{
PROPERTY(VALUE, IMETH_ACCUM, IDMEMBER_ACCUM, VT_I4),
PROPERTY(ACCUM, IMETH_ACCUM, IDMEMBER_ACCUM, VT_I4),
PROPERTY(OPND, IMETH_OPERAND, IDMEMBER_OPERAND, VT_I4),
PROPERTY(OP, IMETH_OPERATOR, IDMEMBER_OPERATOR, VT_I2),
METHOD0(EVAL, IMETH_EVAL, IDMEMBER_EVAL, VT_BOOL),
METHOD0(CLEAR, IMETH_CLEAR, IDMEMBER_CLEAR, VT_EMPTY),
METHOD0(DISPLAY, IMETH_DISPLAY, IDMEMBER_DISPLAY, VT_EMPTY),
METHOD0(QUIT, IMETH_QUIT, IDMEMBER_QUIT, VT_EMPTY),
METHOD1(BUTTON, IMETH_BUTTON, IDMEMBER_BUTTON, VT_BOOL),
};
INTERFACEDATA NEARDATA g_idataCCalc =
{
rgmdataCCalc, DIM(rgmdataCCalc)
};
// Use Dispatch interface API functions to implement IDispatch.
CCalc *
CCalc::Create()
{
HRESULT hresult;
CCalc * pcalc;
CArith * parith;
ITypeInfo * ptinfo;
IUnknown * punkStdDisp;
extern INTERFACEDATA NEARDATA g_idataCCalc;
if((pcalc = new CCalc()) == NULL)
return NULL;
pcalc->AddRef();
parith = &(pcalc->m_arith);
// Build type information for the functionality on this object that
// is being exposed for external programmability.
hresult = CreateDispTypeInfo(
&g_idataCCalc, LOCALE_SYSTEM_DEFAULT, &ptinfo);
if(hresult != NOERROR)
goto LError0;
// Create an aggregate with an instance of the default
// implementation of IDispatch that is initialized with
// type information.
hresult = CreateStdDispatch(
pcalc, // Controlling unknown.
parith, // Instance to dispatch on.
ptinfo, // Type information describing the instance.
&punkStdDisp);
ptinfo->Release();
if(hresult != NOERROR)
goto LError0;
pcalc->m_punkStdDisp = punkStdDisp;
return pcalc;
LError0:;
pcalc->Release();
return NULL;
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | oleauto.h |
라이브러리 | OleAut32.lib |
DLL | OleAut32.dll |