Klasa COleDispatchDriver
Implementuje stronę klienta automatyzacji OLE.
Składnia
class COleDispatchDriver
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
COleDispatchDriver::COleDispatchDriver | COleDispatchDriver Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
COleDispatchDriver::AttachDispatch | IDispatch Dołącza połączenie z obiektemCOleDispatchDriver . |
COleDispatchDriver::CreateDispatch | IDispatch Tworzy połączenie i dołącza je do COleDispatchDriver obiektu. |
COleDispatchDriver::D etachDispatch | Odłącza IDispatch połączenie bez zwalniania go. |
COleDispatchDriver::GetProperty | Pobiera właściwość automatyzacji. |
COleDispatchDriver::InvokeHelper | Pomocnik do wywoływania metod automatyzacji. |
COleDispatchDriver::ReleaseDispatch | IDispatch Zwalnia połączenie. |
COleDispatchDriver::SetProperty | Ustawia właściwość automatyzacji. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
COleDispatchDriver::operator = | Kopiuje wartość źródłową COleDispatchDriver do obiektu. |
COleDispatchDriver::operator LPDISPATCH | Uzyskuje dostęp do bazowego IDispatch wskaźnika. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
COleDispatchDriver::m_bAutoRelease | Określa, czy zwalniać IDispatch podczas ReleaseDispatch lub niszczenie obiektu. |
COleDispatchDriver::m_lpDispatch | Wskazuje wskaźnik do interfejsu dołączonego IDispatch do tego COleDispatchDriver elementu . |
Uwagi
COleDispatchDriver
nie ma klasy bazowej.
Interfejsy wysyłania OLE zapewniają dostęp do metod i właściwości obiektu. Funkcje składowe dołączania COleDispatchDriver
, odłączania, tworzenia i wydawania połączenia wysyłania typu IDispatch
. Inne funkcje składowe używają list argumentów zmiennych, aby uprościć wywoływanie elementu IDispatch::Invoke
.
Tej klasy można używać bezpośrednio, ale jest ona zwykle używana tylko przez klasy utworzone przez Kreatora dodawania klas. Podczas tworzenia nowych klas języka C++ przez zaimportowanie biblioteki typów nowe klasy pochodzą z COleDispatchDriver
klasy .
Aby uzyskać więcej informacji na temat korzystania z programu COleDispatchDriver
, zobacz następujące artykuły:
Hierarchia dziedziczenia
COleDispatchDriver
Wymagania
Nagłówek: afxdisp.h
COleDispatchDriver::AttachDispatch
Wywołaj funkcję składową, AttachDispatch
aby dołączyć IDispatch
wskaźnik do COleDispatchDriver
obiektu. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu IDispatch.
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
Parametry
lpDispatch
Wskaźnik do obiektu OLE IDispatch
, który ma zostać dołączony do COleDispatchDriver
obiektu.
bAutoRelease
Określa, czy wysyłka ma zostać wydana, gdy ten obiekt wykracza poza zakres.
Uwagi
Ta funkcja zwalnia wszystkie IDispatch
wskaźniki, które są już dołączone do COleDispatchDriver
obiektu.
Przykład
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
Tworzy obiekt.
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
Parametry
lpDispatch
Wskaźnik do obiektu OLE IDispatch
, który ma zostać dołączony do COleDispatchDriver
obiektu.
bAutoRelease
Określa, czy wysyłka ma zostać wydana, gdy ten obiekt wykracza poza zakres.
dispatchSrc
Odwołanie do istniejącego COleDispatchDriver
obiektu.
Uwagi
Formularz COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE )
łączy interfejs IDispatch .
Formularz COleDispatchDriver( const COleDispatchDriver& dispatchSrc )
kopiuje istniejący COleDispatchDriver
obiekt i zwiększa liczbę odwołań.
Formularz COleDispatchDriver( )
tworzy obiekt, COleDispatchDriver
ale nie łączy interfejsu IDispatch
. Przed użyciem COleDispatchDriver( )
IDispatch
argumentów bez argumentów należy połączyć się z nim przy użyciu COleDispatchDriver::CreateDispatch lub COleDispatchDriver::AttachDispatch. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu IDispatch.
Przykład
Zobacz przykład COleDispatchDriver::CreateDispatch.
COleDispatchDriver::CreateDispatch
Tworzy obiekt interfejsu IDispatch i dołącza go do COleDispatchDriver
obiektu.
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
Parametry
clsid
Identyfikator IDispatch
klasy obiektu połączenia, który ma zostać utworzony.
pError
Wskaźnik do obiektu wyjątku OLE, który będzie przechowywać kod stanu wynikający z utworzenia.
lpszProgID
Wskaźnik do identyfikatora programowego, takiego jak "Excel.Document.5", obiektu automatyzacji, dla którego ma zostać utworzony obiekt wysyłania.
Wartość zwracana
Nonzero na sukces; w przeciwnym razie 0.
Przykład
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
Odłącza bieżące IDispatch
połączenie od tego obiektu.
LPDISPATCH DetachDispatch();
Wartość zwracana
Wskaźnik do wcześniej dołączonego obiektu OLE IDispatch
.
Uwagi
Element IDispatch
nie jest zwalniany.
Aby uzyskać więcej informacji na temat typu LPDISPATCH, zobacz Implementowanie interfejsu IDispatch w zestawie Windows SDK.
Przykład
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver::GetProperty
Pobiera właściwość obiektu określoną przez dwDispID.
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
Parametry
dwDispID
Identyfikuje właściwość do pobrania.
vtProp
Określa właściwość, która ma zostać pobrana. Aby uzyskać możliwe wartości, zobacz sekcję Uwagi dla COleDispatchDriver::InvokeHelper.
pvProp
Adres zmiennej, która otrzyma wartość właściwości. Musi być zgodny z typem określonym przez vtProp.
Przykład
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
Wywołuje metodę obiektu lub właściwość określoną przez dwDispID w kontekście określonym przez wFlags.
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
Parametry
dwDispID
Identyfikuje metodę lub właściwość do wywołania.
opóźnienia wFlags
Flagi opisujące kontekst wywołania metody IDispatch::Invoke
. . Aby uzyskać listę możliwych wartości, zobacz parametr wFlags w IDispatch::Invoke w zestawie SDK systemu Windows.
vtRet
Określa typ wartości zwracanej. Aby uzyskać możliwe wartości, zobacz sekcję Uwagi.
pvRet
Adres zmiennej, która otrzyma wartość właściwości lub wartość zwracaną. Musi być zgodny z typem określonym przez vtRet.
pbParamInfo
Wskaźnik do ciągu zakończonych wartości null bajtów określających typy parametrów po pbParamInfo.
...
Lista zmiennych parametrów typów określonych w pliku pbParamInfo.
Uwagi
Parametr pbParamInfo określa typy parametrów przekazywanych do metody lub właściwości. Lista zmiennych argumentów jest reprezentowana przez ... w deklaracji składni.
Możliwe wartości argumentu vtRet są pobierane z wyliczenia VARENUM. Dopuszczalne są następujące wartości:
Symbol | Zwracany typ |
---|---|
VT_EMPTY | void |
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | DATA |
VT_BSTR | BSTR |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | WARIANT |
VT_UNKNOWN | LPUNKNOWN |
Argument pbParamInfo to rozdzielona spacjami lista VTS_ stałych. Co najmniej jedna z tych wartości oddzielona spacjami (nie przecinkami) określa listę parametrów funkcji. Możliwe wartości są wyświetlane w makrze EVENT_CUSTOM .
Ta funkcja konwertuje parametry na wartości VARIANTARG, a następnie wywołuje metodę IDispatch::Invoke . Jeśli wywołanie nie powiedzie się Invoke
, ta funkcja zgłosi wyjątek. Jeśli zwrócony przez IDispatch::Invoke
element SCODE (kod stanu) jest DISP_E_EXCEPTION, ta funkcja zgłasza obiekt COleException. W przeciwnym razie zgłasza wyjątek COleDispatchException.
Aby uzyskać więcej informacji, zobacz VARIANTARG, Implementowanie interfejsu IDispatch, IDispatch::Invoke i struktura kodów błędów COM w zestawie Windows SDK.
Przykład
Zobacz przykład COleDispatchDriver::CreateDispatch.
COleDispatchDriver::m_bAutoRelease
Jeśli wartość TRUE, obiekt COM, do których uzyskuje dostęp m_lpDispatch , zostanie automatycznie zwolniony, gdy zostanie wywołana funkcja ReleaseDispatch lub gdy ten COleDispatchDriver
obiekt zostanie zniszczony.
BOOL m_bAutoRelease;
Uwagi
Domyślnie m_bAutoRelease
jest ustawiona wartość TRUE w konstruktorze.
Aby uzyskać więcej informacji na temat wydawania obiektów COM, zobacz Implementowanie zliczania odwołań i IUnknown::Release w zestawie Windows SDK.
Przykład
// 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
Wskaźnik do interfejsu dołączonego IDispatch
do tego COleDispatchDriver
elementu .
LPDISPATCH m_lpDispatch;
Uwagi
Element m_lpDispatch
członkowski danych jest zmienną publiczną typu LPDISPATCH.
Aby uzyskać więcej informacji, zobacz IDispatch w zestawie Windows SDK.
Przykład
Zobacz przykład COleDispatchDriver::AttachDispatch.
COleDispatchDriver::operator =
Kopiuje wartość źródłową COleDispatchDriver
do obiektu.
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
Parametry
dispatchSrc
Wskaźnik do istniejącego COleDispatchDriver
obiektu.
COleDispatchDriver::operator LPDISPATCH
Uzyskuje dostęp do bazowego IDispatch
COleDispatchDriver
wskaźnika obiektu.
operator LPDISPATCH();
Przykład
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
Zwalnia połączenie. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu IDispatch
void ReleaseDispatch();
Uwagi
Jeśli dla tego połączenia ustawiono automatyczne wydanie, ta funkcja wywołuje IDispatch::Release
je przed wydaniem interfejsu.
Przykład
Zobacz przykład COleDispatchDriver::AttachDispatch.
COleDispatchDriver::SetProperty
Ustawia właściwość obiektu OLE określoną przez dwDispID.
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
Parametry
dwDispID
Określa właściwość, która ma zostać ustawiona.
vtProp
Określa typ właściwości, która ma zostać ustawiona. Aby uzyskać możliwe wartości, zobacz sekcję Uwagi dla COleDispatchDriver::InvokeHelper.
...
Pojedynczy parametr typu określony przez vtProp.
Przykład
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
Zobacz też
Przykład MFC — CALCDRIV
Przykładowa usługa ACDUAL MFC
Wykres hierarchii
Klasa CCmdTarget