CreateDispTypeInfo
[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]
使用の簡略化された型情報を作成する の IDispatch を実装します。
HRESULT CreateDispTypeInfo(
INTERFACEDATA pidata,
LCID lcid,
ITypeInfo FAR* FAR* pptinfo
);
パラメーター
pidata
この種類の情報を記述するインターフェイス説明です。lcid
型情報に使用される名前のロケール識別子です。pptinfo
DispGetIDsOfNames の ms221309(v=vs.100).md と DispInvoke の ms221366(v=vs.100).md で使用する型情報の実装に戻り、ポインター。
戻り値
返された HRESULT から取得される戻り値は、次のいずれかになります。
戻り値 |
説明 |
---|---|
S_OK |
インターフェイスはサポートします。 |
E_INVALIDARG |
インターフェイスの説明または LCID が無効です。 |
E_OUTOFMEMORY |
メモリ不足のため操作を完了をできません。 |
[コメント]
CreateDispTypeInfo の と公開されるオブジェクトを説明する INTERFACEDATA 構造体を使用して実行時に型情報を作成できます。
この関数によって返される型情報は主にされています IDispatch の実装を自動化します。 CreateDispTypeInfo いない戻り値の種類の説明インターフェイス ms221172(v=vs.100).md で説明した型情報がすべて。 引数 pidata インターフェイスの完全な説明を示しますされません。 ヘルプ情報、コメント、省略可能なパラメーターは、およびコンテキストが異なるに役立つその他の型情報は含まれません。
したがって、オブジェクトの型情報を提供するは勧めオブジェクトの説明言語 (ODL) を使用してオブジェクトを記述し、オブジェクトの説明をインターフェイス定義言語 (MIDL) コンパイラを使用してタイプ ライブラリにコンパイルします。
タイプ ライブラリからの型情報を使用するには、CreateDispTypeInfo ms221027(v=vs.100).md ではなく、LoadTypeLib の GetTypeInfoOfGuid 関数使用します。 詳細情報 ms221172(v=vs.100).md の種類の説明のインターフェイス。
使用例
次のコードでは型情報を 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 FAR*
CCalc::Create()
{
HRESULT hresult;
CCalc FAR* pcalc;
CArith FAR* parith;
ITypeInfo FAR* ptinfo;
IUnknown FAR* punkStdDisp;
extern INTERFACEDATA NEARDATA g_idataCCalc;
if((pcalc = new FAR 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;
}