次の方法で共有


CreateDispTypeInfo 関数 (oleauto.h)

IDispatch の実装で使用する簡略化された型情報を作成します。

構文

HRESULT CreateDispTypeInfo(
  INTERFACEDATA *pidata,
  LCID          lcid,
  ITypeInfo     **pptinfo
);

パラメーター

pidata

この型情報が記述するインターフェイスの説明。

lcid

型情報で使用される名前のロケール識別子。

pptinfo

戻り値の場合、 DispGetIDsOfNames および DispInvoke で使用する型情報の実装へのポインター。

戻り値

この関数は、これらの値のいずれかを返すことができます。

リターン コード 説明
S_ok
インターフェイスがサポートされています。
E_INVALIDARG
インターフェイスの説明または LCID が無効です。
E_OUTOFMEMORY
操作を完了するにはメモリが不足しています。

注釈

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

こちらもご覧ください

ディスパッチ API 関数の作成

IDispatch