COleDispatchDriver クラス
OLE オートメーションのクライアント側を実装します。
構文
class COleDispatchDriver
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
COleDispatchDriver::COleDispatchDriver | COleDispatchDriver オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
COleDispatchDriver::AttachDispatch | COleDispatchDriver オブジェクトにIDispatch 接続をアタッチします。 |
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 | VARIANT |
VT_UNKNOWN | LPUNKNOWN |
引数 pbParamInfo は、 VTS_ 定数のスペース区切りのリストです。 スペース (コンマではない) で区切られるこれらの値の 1 つ以上は、関数のパラメーター リストを指定します。 使用可能な値は、 EVENT_CUSTOM マクロで一覧表示されます。
この関数は、パラメーターを VARIANTARG 値に変換し、 IDispatch::Invoke メソッドを呼び出します。 Invoke
の呼び出しに失敗すると、この関数は、例外をスローします。 IDispatch::Invoke
によって返される SCODE (状態コード) がDISP_E_EXCEPTION場合、この関数は COleException オブジェクトをスローします。それ以外の場合は、COleDispatchException をスローします。
詳細については、Windows SDK の「
例
COleDispatchDriver::CreateDispatchの例を参照してください。
COleDispatchDriver::m_bAutoRelease
TRUE の場合、 m_lpDispatch によってアクセスされる COM オブジェクトは、 ReleaseDispatch が呼び出されたとき、またはこの COleDispatchDriver
オブジェクトが破棄されたときに自動的に解放されます。
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
COleDispatchDriver
オブジェクトの基になるIDispatch
ポインターにアクセスします。
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);
}