CreateDispTypeInfo 関数 (oleauto.h)
IDispatch の実装で使用する簡略化された型情報を作成します。
構文
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
パラメーター
pidata
この型情報が記述するインターフェイスの説明。
lcid
型情報で使用される名前のロケール識別子。
pptinfo
戻り値の場合、 DispGetIDsOfNames および DispInvoke で使用する型情報の実装へのポインター。
戻り値
この関数は、これらの値のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
インターフェイスがサポートされています。 |
|
インターフェイスの説明または LCID が無効です。 |
|
操作を完了するにはメモリが不足しています。 |
注釈
CreateDispTypeInfo と、公開されているオブジェクトを記述する INTERFACEDATA 構造体を使用して、実行時に型情報を構築できます。
この関数によって返される型情報は、主に IDispatch の実装を自動化するように設計されています。 CreateDispTypeInfo は、「 型の説明インターフェイス」で説明されているすべての型情報を返すわけではありません。 引数 pidata は、インターフェイスの完全な説明ではありません。 ヘルプ情報、コメント、省略可能なパラメーター、およびさまざまなコンテキストで役立つその他の型情報は含まれません。
したがって、オブジェクトに関する型情報を提供するには、オブジェクト記述言語 (ODL) を使用してオブジェクトを記述し、Microsoft インターフェイス定義言語 (MIDL) コンパイラを使用してオブジェクトの説明をタイプ ライブラリにコンパイルすることをお勧めします。
タイプ ライブラリの型情報を使用するには、CreateDispTypeInfo の代わりに LoadTypeLib 関数と GetTypeInfoOfGuid 関数を使用します。 詳細については、「 Type Description Interfaces」を参照してください。
例
次のコードは、CCalc オブジェクトを公開するために INTERFACEDATA から型情報を作成します。
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 |
Library | OleAut32.lib |
[DLL] | OleAut32.dll |