Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
Реализует автоматизацию OLE на стороне клиента.
Синтаксис
class COleDispatchDriver
Участники
Открытые конструкторы
| Имя | Описание |
|---|---|
| COleDispatchDriver::COleDispatchDriver | Формирует объект COleDispatchDriver. |
Открытые методы
| Имя | Описание |
|---|---|
| COleDispatchDriver::AttachDispatch | Присоединяет подключение к объекту IDispatchCOleDispatchDriver . |
| 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 | Указывает, следует ли освободить во время IDispatch или уничтожении ReleaseDispatch объекта. |
| COleDispatchDriver::m_lpDispatch | Указывает указатель на интерфейс, подключенный IDispatch к этому COleDispatchDriver. |
Замечания
COleDispatchDriver не имеет базового класса.
Интерфейсы диспетчеризации OLE предоставляют доступ к методам и свойствам объекта. Функции-члены COleDispatchDriver присоединения, отсоединения, создания и выпуска подключения к диспетчеру типа IDispatch. Другие функции-члены используют списки аргументов переменной для упрощения вызова 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
Указатель на объект OLE IDispatch , который необходимо присоединить к объекту 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
Указатель на объект OLE IDispatch , который необходимо присоединить к объекту COleDispatchDriver .
bAutoRelease
Определяет, следует ли освободить диспетчер, когда этот объект выходит из области действия.
dispatchSrc
Ссылка на существующий COleDispatchDriver объект.
Замечания
COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) Форма подключает интерфейс IDispatch.
COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) Форма копирует существующий COleDispatchDriver объект и увеличивает число ссылок.
COleDispatchDriver( ) Форма создает COleDispatchDriver объект, но не подключает IDispatch интерфейс. Прежде чем использовать COleDispatchDriver( ) без аргументов, необходимо подключиться IDispatch к нему с помощью COleDispatchDriver::CreateDispatch или COleDispatchDriver::AttachDispatch. Дополнительные сведения см. в разделе 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 .
pError
Указатель на объект исключения OLE, который будет содержать код состояния, полученный в результате создания.
lpszProgID
Указатель на программный идентификатор, например 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();
}
COleDispatchDriver::D etachDispatch
Отсоединяет текущее IDispatch соединение от этого объекта.
LPDISPATCH DetachDispatch();
Возвращаемое значение
Указатель на ранее присоединенный объект OLE IDispatch .
Замечания
Не IDispatch выпущен.
Дополнительные сведения о типе LPDISPATCH см. в разделе "Реализация интерфейса IDispatch" в пакете SDK для Windows.
Пример
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
Вызывает метод объекта или свойство, указанное dwDispID, в контексте, указанном wFlags.
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
Параметры
dwDispID
Задает вызываемый метод или свойство.
wFlags
Флаги, описывающие контекст вызова IDispatch::Invoke. . Список возможных значений см. в параметре wFlags в IDispatch::Invoke в пакете SDK для Windows.
vtRet
Указывает тип возвращаемого значения. Возможные значения см. в разделе "Примечания".
pvRet
Адрес переменной, которая будет принимать значение свойства или возвращаемое значение. Он должен соответствовать типу, указанному vtRet.
pbParamInfo
Указатель на строку, завершающуюся значением NULL, в байтах, указывающую типы параметров после pbParamInfo.
...
Список параметров, типов, указанных в 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_ . Одно или несколько из этих значений, разделенных пробелами (не запятыми), составляют список параметров функции. Список возможных значений можно получить с помощью макроса EVENT_CUSTOM .
Эта функция преобразует параметры в значения VARIANTARG, а затем вызывает метод IDispatch::Invoke . Если вызов Invoke завершается сбоем, эта функция создает исключение. Если объект SCODE (код состояния), возвращаемый IDispatch::Invoke DISP_E_EXCEPTION, эта функция создает объект COleException; в противном случае вызывается исключение COleDispatchException.
Дополнительные сведения см. в статье VARIANTARG, реализация интерфейса IDispatch, IDispatch::Invoke и структура кодов ошибок COM в пакете SDK для Windows.
Пример
См. пример для COleDispatchDriver::CreateDispatch.
COleDispatchDriver::m_bAutoRelease
Если значение TRUE, объект COM, к которым обращается m_lpDispatch , автоматически освобождается при вызове ReleaseDispatch или при уничтожении этого COleDispatchDriver объекта.
BOOL m_bAutoRelease;
Замечания
По умолчанию m_bAutoRelease в конструкторе задано значение TRUE.
Дополнительные сведения о выпуске COM-объектов см. в разделе "Реализация подсчета ссылок" и IUnknown::Release в пакете SDK для Windows.
Пример
// 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
Указатель на интерфейс, подключенный IDispatch к этому COleDispatchDriver.
LPDISPATCH m_lpDispatch;
Замечания
Элемент m_lpDispatch данных — это общедоступная переменная типа LPDISPATCH.
Дополнительные сведения см. в разделе IDispatch в пакете SDK для Windows.
Пример
См. пример 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
Задает свойство объекта OLE, указанное dwDispID.
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);
}
См. также
Пример CALCDRIV MFC
Пример ACDUAL для MFC
Диаграмма иерархии
Класс CCmdTarget