次の方法で共有


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::InvokewFlags パラメーターを参照してください。

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 の「VARIANTARGIDispatch インターフェイスの実装IDispatch::Invoke COM エラー コードの構造を参照してください。

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);
}

関連項目

MFC サンプル CALCDRIV
MFC サンプル ACDUAL
階層図
CCmdTarget クラス