COleDispatchDriver クラス
OLE オートメーションのクライアント側を実装します。
構文
class COleDispatchDriver
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
COleDispatchDriver::COleDispatchDriver | COleDispatchDriver オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
COleDispatchDriver::AttachDispatch | オブジェクトへの IDispatch 接続を COleDispatchDriver アタッチします。 |
COleDispatchDriver::CreateDispatch | 接続を IDispatch 作成し、オブジェクトに COleDispatchDriver アタッチします。 |
COleDispatchDriver::D etachDispatch | 接続を IDispatch 解放せずに切断します。 |
COleDispatchDriver::GetProperty | オートメーション プロパティを取得します。 |
COleDispatchDriver::InvokeHelper | オートメーション メソッドを呼び出すためのヘルパー。 |
COleDispatchDriver::ReleaseDispatch | 接続を解放します IDispatch 。 |
COleDispatchDriver::SetProperty | オートメーション プロパティを設定します。 |
パブリック演算子
名前 | 説明 |
---|---|
COleDispatchDriver::operator = | ソース値をオブジェクトに COleDispatchDriver コピーします。 |
COleDispatchDriver::operator LPDISPATCH | 基になる IDispatch ポインターにアクセスします。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
COleDispatchDriver::m_bAutoRelease | オブジェクトの破棄中ReleaseDispatch に解放するか、オブジェクトをIDispatch 破棄するかを指定します。 |
COleDispatchDriver::m_lpDispatch | このCOleDispatchDriver インターフェイスにアタッチされているインターフェイスへのIDispatch ポインターを示します。 |
解説
COleDispatchDriver
には基底クラスはありません。
OLE ディスパッチ インターフェイスは、オブジェクトのメソッドとプロパティへのアクセスを提供します。 型IDispatch
のディスパッチ接続をCOleDispatchDriver
アタッチ、デタッチ、作成、および解放するメンバー関数。 他のメンバー関数は、変数引数リストを使用して呼び出し IDispatch::Invoke
を簡略化します。
このクラスは直接使用できますが、通常はクラスの追加ウィザードによって作成されたクラスでのみ使用されます。 タイプ ライブラリをインポートして新しい C++ クラスを作成すると、新しいクラスは COleDispatchDriver
.
使用 COleDispatchDriver
の詳細については、次の記事を参照してください。
継承階層
COleDispatchDriver
要件
ヘッダー : afxdisp.h
COleDispatchDriver::AttachDispatch
AttachDispatch
メンバー関数を呼び出して、 IDispatch
ポインターを COleDispatchDriver
オブジェクトにアタッチします。 詳細については、「 Implementing the IDispatch Interface」を参照してください。
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
パラメーター
lpDispatch
IDispatch
オブジェクトにアタッチされる OLE COleDispatchDriver
オブジェクトへのポインター。
bAutoRelease
このオブジェクトがスコープ外になるときにディスパッチが解放されるかどうかを指定します。
解説
この関数は、 IDispatch
オブジェクトに既にアタッチされている COleDispatchDriver
ポインターを解放します。
例
void COleContainerView::OnAttachDispatch()
{
CLSID clsidWMP;
LPDISPATCH pWMPDispatch = NULL;
COleDispatchDriver oddWMP;
try
{
AfxCheckError(::CLSIDFromProgID(_T("WMPlayer.OCX"), &clsidWMP));
AfxCheckError(::CoCreateInstance(clsidWMP, NULL, CLSCTX_INPROC_SERVER,
IID_IDispatch, (LPVOID*)& pWMPDispatch));
oddWMP.AttachDispatch(pWMPDispatch, TRUE);
pWMPDispatch = NULL; // our COleDispatchDriver now owns the interface
CString strUIMode;
oddWMP.GetProperty(23, VT_BSTR, (void*)& strUIMode);
TRACE(_T("WMP uiMode is %s.\n"), strUIMode);
}
catch (COleException* pe)
{
pe->ReportError();
pe->Delete();
}
catch (CMemoryException* pe)
{
pe->ReportError();
pe->Delete();
}
// cleanup
if (NULL != pWMPDispatch)
{
pWMPDispatch->Release();
}
// COleDispatchDriver automatically releases the dispatch interface when
// it goes out of scope if m_bAutoRelease is TRUE.
}
COleDispatchDriver::COleDispatchDriver
COleDispatchDriver
オブジェクトを構築します。
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
パラメーター
lpDispatch
IDispatch
オブジェクトにアタッチされる OLE COleDispatchDriver
オブジェクトへのポインター。
bAutoRelease
このオブジェクトがスコープ外になるときにディスパッチが解放されるかどうかを指定します。
dispatchSrc
既存 COleDispatchDriver
のオブジェクトへの参照。
解説
フォームCOleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE )
は IDispatch インターフェイスを接続します。
フォーム COleDispatchDriver( const COleDispatchDriver& dispatchSrc )
は既存 COleDispatchDriver
のオブジェクトをコピーし、参照カウントをインクリメントします。
フォーム COleDispatchDriver( )
はオブジェクトを COleDispatchDriver
作成しますが、インターフェイスは IDispatch
接続しません。 引数を指定せずに使用COleDispatchDriver( )
する前に、COleDispatchDriver::CreateDispatch または COleDispatchDriver::AttachDispatch を使用して接続する必要がありますIDispatch
。 詳細については、「 Implementing the IDispatch Interface」を参照してください。
例
COleDispatchDriver::CreateDispatchの例を参照してください。
COleDispatchDriver::CreateDispatch
IDispatch インターフェイス オブジェクトを作成して COleDispatchDriver
オブジェクトにアタッチします。
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
パラメーター
clsid
作成する IDispatch
接続オブジェクトのクラス ID。
pError
作成の結果ステータス コードを格納する OLE 例外オブジェクトへのポインター。
lpszProgID
ディスパッチ オブジェクトが作成されるオートメーション オブジェクトの"Excel.Document.5"などのプログラム ID へのポインター。
戻り値
正常に完了した場合はゼロ以外、それ以外の場合は 0 です。
例
void COleContainerView::OnCreateDispatch()
{
COleDispatchDriver disp;
COleException* pe = new COleException;
try
{
// Create instance of Microsoft System Information Control
// by using ProgID.
if (disp.CreateDispatch(_T("WMPlayer.OCX"), pe))
{
//Get uiMode.
CString strUIMode;
disp.InvokeHelper(23, DISPATCH_PROPERTYGET, VT_BSTR,
(void*)& strUIMode, NULL);
CString strMsg;
strMsg.Format(_T("WMP uiMode is %s."), strUIMode);
AfxMessageBox(strMsg);
}
else
{
throw pe;
}
}
//Catch control-specific exceptions.
catch (COleDispatchException* pe)
{
CString cStr;
if (!pe->m_strSource.IsEmpty())
cStr = pe->m_strSource + _T(" - ");
if (!pe->m_strDescription.IsEmpty())
cStr += pe->m_strDescription;
else
cStr += _T("unknown error");
AfxMessageBox(cStr, MB_OK,
(pe->m_strHelpFile.IsEmpty()) ? 0 : pe->m_dwHelpContext);
pe->Delete();
}
//Catch all MFC exceptions, including COleExceptions.
// OS exceptions will not be caught.
catch (CException* pe)
{
TRACE(_T("%s(%d): OLE Execption caught: SCODE = %x"),
__FILE__, __LINE__, COleException::Process(pe));
pe->Delete();
}
pe->Delete();
}
COleDispatchDriver::D etachDispatch
このオブジェクトから現在 IDispatch
の接続をデタッチします。
LPDISPATCH DetachDispatch();
戻り値
以前にアタッチされた OLE IDispatch
オブジェクトへのポインター。
解説
リリース IDispatch
されていません。
LPDISPATCH の種類の詳細については、「Windows SDK での IDispatch インターフェイスの実装」を参照してください。
例
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver::GetProperty
dwDispID で指定されたオブジェクト プロパティを取得します。
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
パラメーター
dwDispID
取得するプロパティを識別します。
vtProp
取得するプロパティを指定します。 使用できる値については、 COleDispatchDriver::InvokeHelperの「解説」をご覧ください。
pvProp
プロパティ値を受け取る変数のアドレス。 vtProp で指定された型と一致する必要があります。
例
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
wFlags で指定されたコンテキストで 、dwDispID で指定された オブジェクト メソッドまたはプロパティを呼び出します。
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
パラメーター
dwDispID
呼び出されるメソッドまたはプロパティを識別します。
wFlags
への呼び出しのコンテキストを記述する IDispatch::Invoke
フラグ。 . 使用可能な値の一覧については、Windows SDK の IDispatch::Invoke の wFlags パラメーターを参照してください。
vtRet
戻り値の型を指定します。 使用可能な値については、「解説」を参照してください。
pvRet
プロパティ値または戻り値を受け取る変数のアドレス。 vtRet で指定された型と一致する必要があります。
pbParamInfo
pbParamInfo に続くパラメーターの型を指定する、null で終わるバイト文字列へのポインター。
...
pbParamInfo で指定された型のパラメーターの変数リスト。
解説
pbParamInfo パラメーターは、メソッドまたはプロパティに渡されるパラメーターの型を指定します。 引数の変数一覧は、構文宣言では、 ... で表されます。
vtRet 引数に指定できる値は、VARENUM 列挙型から取得されます。 使用できる値は次のとおりです。
記号 | 返り値の種類 |
---|---|
VT_EMPTY | void |
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | Cy |
VT_DATE | DATE |
VT_BSTR | BSTR |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | バリアント |
VT_UNKNOWN | LPUNKNOWN |
pbParamInfo 引数は、VTS_定数のスペース区切りのリストです。 スペース (コンマではない) で区切られるこれらの値の 1 つ以上は、関数のパラメーター リストを指定します。 使用可能な値は、 EVENT_CUSTOM マクロで一覧表示されます。
この関数は、パラメーターを VARIANTARG 値に変換し、IDispatch::Invoke メソッドを 呼び出 します。 Invoke
の呼び出しに失敗すると、この関数は、例外をスローします。 返される IDispatch::Invoke
SCODE (状態コード) がDISP_E_EXCEPTION場合、この関数は COleException オブジェクトをスローします。それ以外の場合は、COleDispatchException をスローします。
詳細については、WINDOWS SDK での VARIANTARG、 IDispatch インターフェイスの実装、 IDispatch::Invoke、COM エラー コード の構造に関するページを参照してください。
例
COleDispatchDriver::CreateDispatchの例を参照してください。
COleDispatchDriver::m_bAutoRelease
TRUE の場合、releaseDispatch が呼び出されたとき、またはこのCOleDispatchDriver
オブジェクトが破棄されるときに、m_lpDispatchによってアクセスされる COM オブジェクトが自動的に解放されます。
BOOL m_bAutoRelease;
解説
既定では、 m_bAutoRelease
コンストラクターでは TRUE に設定されています。
COM オブジェクトのリリースの詳細については、「Windows SDK での参照カウントと IUnknown::Release の実装」を参照してください。
例
// Clean up by forcing Release to be called
// on COleDispatchDriver object and delete
if (bError)
{
pDisp->m_bAutoRelease = TRUE;
delete pDisp;
pDisp = NULL;
}
COleDispatchDriver::m_lpDispatch
これにCOleDispatchDriver
アタッチされているインターフェイスへのIDispatch
ポインター。
LPDISPATCH m_lpDispatch;
解説
m_lpDispatch
データ メンバーは LPDISPATCH 型のパブリック変数です。
詳細については、Windows SDK の IDispatch を参照してください。
例
COleDispatchDriver::AttachDispatch の例を参照してください。
COleDispatchDriver::operator =
ソース値をオブジェクトに COleDispatchDriver
コピーします。
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
パラメーター
dispatchSrc
既存の COleDispatchDriver
オブジェクトへのポインター。
COleDispatchDriver::operator LPDISPATCH
オブジェクトの基になる IDispatch
ポインターに COleDispatchDriver
アクセスします。
operator LPDISPATCH();
例
COleDispatchDriver disp;
if (disp.CreateDispatch(_T("WMPlayer.OCX")))
{
IDispatch* pDispatch = disp; //COleDispatchDriver::operator
//LPDISPATCH is called here
IUnknown* pUnkn = NULL;
HRESULT hr = pDispatch->QueryInterface(IID_IUnknown, (void**)& pUnkn);
if (SUCCEEDED(hr))
{
//Do something...
pUnkn->Release();
}
}
COleDispatchDriver::ReleaseDispatch
接続を解放します IDispatch
。 詳細については、「IDispatch インターフェイスの実装」を参照してください 。
void ReleaseDispatch();
解説
この接続に対して自動解放が設定されている場合、この関数はインターフェイスを解放する前に呼び出 IDispatch::Release
します。
例
COleDispatchDriver::AttachDispatch の例を参照してください。
COleDispatchDriver::SetProperty
dwDispID で指定された OLE オブジェクト プロパティを設定します。
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
パラメーター
dwDispID
設定するプロパティを識別します。
vtProp
設定するプロパティの型を指定します。 使用できる値については、 COleDispatchDriver::InvokeHelperの「解説」をご覧ください。
...
vtProp で指定された型の 1 つのパラメーター。
例
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示