CreateStdDispatch
[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]
1 つの関数呼び出しで IDispatch インターフェイスの標準的な実装を作成します。 これによりが、オートメーションを通じて公開オブジェクト簡素化されます。
HRESULT CreateStdDispatch(
IUnknown FAR* punkOuter,
void FAR* pvThis,
ITypeInfo FAR* ptinfo,
IUnknown FAR* FAR* ppunkStdDisp
);
パラメーター
punkOuter
オブジェクトの IUnknown 実装へのポインター。pvThis
公開するオブジェクトのポインター。ptinfo
型情報の公開されたオブジェクトを表すへのポインター。ppunkStdDisp
IDispatch インターフェイス 通話の QueryInterface を実装するオブジェクトのプライベートは不明です。 このポインターが NULL です、関数が失敗した場合。
戻り値
返された HRESULT から取得される戻り値は、次のいずれかになります。
戻り値 |
説明 |
---|---|
S_OK |
成功。 |
E_INVALIDARG |
1 つの最初の 3 つの引数が無効です。 |
E_OUTOFMEMORY |
操作を完了する十分なメモリでした。 |
[コメント]
オブジェクトの IDispatch メンバー関数を実装するのではなくオブジェクト作成時に CreateStdDispatch 使用できます。 ただし、実装は、CreateStdDispatch その 作成がこれらの制限。
1 つだけの言語をサポートします。
の呼び出しから返される例外ディスパッチ定義コードのみをサポートします。
LoadTypeLib GetTypeInfoOfGuid、や CreateStdDispatch の を構成するには、タイプ ライブラリを使ってオブジェクトを公開する呼び出しに必要な関数の最小セットします。 LoadTypeLib の と GetTypeInfoOfGuid の の詳細については、 ms221172(v=vs.100).md の種類の説明のインターフェイスを参照してください。
CreateDispTypeInfo と CreateStdDispatch の INTERFACEDATA 構造によって提供されるタイプ情報を使ってオブジェクトを公開する呼び出しに必要なディスパッチ コンポーネントの最小セットを含めます。
使用例
次のコードは の CreateStdDispatch を使用して CCalc クラスののためには、 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;
}