COleDispatchDriver Class

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

實作 OLE Automation 的用戶端。

class COleDispatchDriver  

公用建構函式

名稱說明
COleDispatchDriver::COleDispatchDriver建構 COleDispatchDriver 物件。

公用方法

名稱說明
COleDispatchDriver::AttachDispatch附加IDispatch連接COleDispatchDriver物件。
COleDispatchDriver::CreateDispatch建立IDispatch連線,並將它附加COleDispatchDriver物件。
COleDispatchDriver::DetachDispatch卸離IDispatch連線,但未釋放 mutex。
COleDispatchDriver::GetProperty取得自動化屬性。
COleDispatchDriver::InvokeHelper呼叫自動化方法的協助程式。
COleDispatchDriver::ReleaseDispatch版本IDispatch連線。
COleDispatchDriver::SetProperty設定自動化屬性。

公用運算子

名稱說明
COleDispatchDriver::operator =複製到來源值COleDispatchDriver物件。
COleDispatchDriver::operator LPDISPATCH存取基礎IDispatch指標。

公用資料成員

名稱說明
COleDispatchDriver::m_bAutoRelease指定是否要釋放IDispatch期間ReleaseDispatch或物件解構。
COleDispatchDriver::m_lpDispatch指出指標IDispatch介面附加至這個COleDispatchDriver

COleDispatchDriver沒有基底類別。

OLE 分派介面可存取物件的方法和屬性。 成員函式的COleDispatchDriver附加、 卸離、 建立和發行類型的分派連線IDispatch。 其他成員函式使用變數引數清單,以簡化呼叫Excepinfo

這個類別可以直接使用,但它通常由只加入類別精靈所建立的類別。 當您匯入類型程式庫建立新的 c + + 類別時,將新的類別衍生自COleDispatchDriver

如需有關使用COleDispatchDriver,請參閱下列文章︰

COleDispatchDriver

標頭: afxdisp.h

呼叫 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(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);  
  COleDispatchDriver(const COleDispatchDriver& dispatchSrc);

參數

lpDispatch
要附加至 IDispatch 物件的 OLE COleDispatchDriver 物件指標。

bAutoRelease
指定當這個物件移出範圍時,是否要釋放此分派。

dispatchSrc
參考到現有COleDispatchDriver物件。

備註

表單COleDispatchDriver( LPDISPATCH``lpDispatchBOOLbAutoRelease = TRUE) 連接IDispatch介面。

表單COleDispatchDriver( constCOleDispatchDriver& dispatchSrc) 複製現有COleDispatchDriver物件,並遞增參考計數。

表單COleDispatchDriver() 會建立COleDispatchDriver物件,但不會連線IDispatch介面。 使用之前COleDispatchDriver(不含引數),您應該連接IDispatch它使用COleDispatchDriver::CreateDispatchCOleDispatchDriver::AttachDispatch。 如需詳細資訊,請參閱 Implementing the IDispatch Interface

範例

請參閱範例COleDispatchDriver::CreateDispatch

建立 IDispatch 介面物件並將它附加至 COleDispatchDriver 物件。

BOOL CreateDispatch(
        REFCLSID clsid,  
        COleException* pError = NULL);

 
BOOL CreateDispatch(
    LPCTSTR lpszProgID,  
    COleException* pError = NULL);

參數

clsid
要建立的 IDispatch 連接物件類別識別碼。

pError
OLE 例外狀況物件的指標,會保留因建立而產生的狀態碼。

lpszProgID
Automation 物件之程式設計識別項的指標,例如 "Excel.Document.5",針對此物件會建立分派物件。

傳回值

非零成功,否則為 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();
}

卸離目前IDispatch從此物件的連接。

LPDISPATCH DetachDispatch();

傳回值

指向先前附加 OLEIDispatch物件。

備註

IDispatch沒有釋出。

如需詳細資訊LPDISPATCH輸入資訊,請參閱實作 IDispatch 介面中Windows SDK。

範例

LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
    COleDispatchDriver disp;

    disp.CreateDispatch(lpszProgId);

    return disp.DetachDispatch();
}

取得所指定的物件屬性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;
}

dwDispID指定的內容中,呼叫物件方法或 wFlags所指定的屬性。

void AFX_CDECL InvokeHelper(
        DISPID dwDispID,  
        WORD wFlags,  
        VARTYPE vtRet,  
        void* pvRet,  
        const BYTE* pbParamInfo, ...);

參數

dwDispID
指定所要叫用的屬性或方法。

wFlags
描述要呼叫 IDispatch::Invoke時之內容的旗標。 。 如需可能的值,請參閱wFlags中的參數Excepinfo中Windows SDK。

vtRet
指定傳回值的類型。 如需了解可能的值,請參閱<備註>一節。

pvRet
要接收屬性值或傳回值之變數的位址。 其必須符合 vtRet所指定的類型。

pbParamInfo
指定以 null終止,並尾隨在 pbParamInfo之後之參數類型的位元組的字串指標。

...
pbParamInfo中所指定之參數類型的變數清單。

備註

pbParamInfo 參數會指定傳遞給方法或屬性的參數類型。 引數的變數清單會以 ... 語法宣告代表。

vtRet 引數的可能值會從 VARENUM 列舉中取用。 可能的值如下:

符號傳回類型
VT_EMPTYvoid
VT_I2short
VT_I4long
VT_R4float
VT_R8double
VT_CYCY
VT_DATE日期
VT_BSTRBSTR
VT_DISPATCHLPDISPATCH
VT_ERRORSCODE
VT_BOOLBOOL
VT_VARIANTVARIANT
VT_UNKNOWNLPUNKNOWN

pbParamInfo 引數是以空格分隔的 VTS_ 常數清單。 其中的一或多個值 (以空格分隔,而非逗號) 會指定函式的參數清單。 可能的值會與 [EVENT_CUSTOM]-brokenlink-列出 (.../ Topic/not%20found.md#event_custom) 巨集。

此函式會將參數轉換為 VARIANTARG 值,然後再叫用 IDispatch::Invoke 方法。 若呼叫 Invoke 失敗,此函式會擲回例外狀況。 若 SCODE IDispatch::Invoke 傳回的 (狀態碼) 為 DISP_E_EXCEPTION,此函式會擲回 COleException 物件;否則會擲回 COleDispatchException

如需詳細資訊,請參閱 中的VARIANTARG 實作 IDispatch 介面 IDispatch::Invoke COM 錯誤碼的結構 Windows SDK。

範例

請參閱範例COleDispatchDriver::CreateDispatch

如果TRUE,來存取 COM 物件m_lpDispatch會自動釋放時ReleaseDispatch稱為或當這COleDispatchDriver物件被終結。

BOOL m_bAutoRelease;  

備註

根據預設,m_bAutoRelease設為TRUE建構函式。

如需有關如何釋放 COM 物件的詳細資訊,請參閱實作參考計數Iunknown中Windows SDK。

範例

   // Clean up by forcing Release to be called
   // on COleDispatchDriver object and delete
   if (bError)
   {
      pDisp->m_bAutoRelease = TRUE;
      delete pDisp;
      pDisp = NULL;
   }

將指標IDispatch介面附加至這個COleDispatchDriver

LPDISPATCH m_lpDispatch;  

備註

m_lpDispatch資料成員是類型的公用變數LPDISPATCH

如需詳細資訊,請參閱IDispatch中Windows SDK。

範例

請參閱範例COleDispatchDriver::AttachDispatch

複製到來源值COleDispatchDriver物件。

const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);

參數

dispatchSrc
指向現有的COleDispatchDriver物件。

存取基礎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();
      }
   }

版本IDispatch連線。 如需詳細資訊,請參閱實作 IDispatch 介面

void ReleaseDispatch();

備註

如果此連線已設定自動發行,此函數會呼叫IDispatch::Release之前釋放介面。

範例

請參閱範例COleDispatchDriver::AttachDispatch

設定 dwDispID指定的 OLE 物件屬性。

void AFX_CDECL SetProperty(
    DISPID dwDispID,  
    VARTYPE vtProp, ...);

參數

dwDispID
識別要設定的屬性。

vtProp
指定要設定的屬性類型。 可能的值,請參閱 < 備註 > 一節COleDispatchDriver::InvokeHelper

...
vtProp指定的類型單一參數。

範例

void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
    SetProperty(dispid, VT_BSTR, propVal);
}

MFC 範例 CALCDRIV
MFC 範例 ACDUAL
階層架構圖表
CCmdTarget 類別

顯示: