COleDispatchDriver 클래스
OLE 자동화의 클라이언트 쪽을 구현합니다.
구문
class COleDispatchDriver
멤버
공용 생성자
속성 | 설명 |
---|---|
COleDispatchDriver::COleDispatchDriver | COleDispatchDriver 개체를 생성합니다. |
공용 메서드
이름 | 설명 |
---|---|
COleDispatchDriver::AttachDispatch | 개체에 IDispatch 대한 연결을 COleDispatchDriver 연결합니다. |
COleDispatchDriver::CreateDispatch | IDispatch 연결을 만들고 개체에 COleDispatchDriver 연결합니다. |
COleDispatchDriver::DetachDispatch | IDispatch 연결을 해제하지 않고 분리합니다. |
COleDispatchDriver::GetProperty | 자동화 속성을 가져옵니다. |
COleDispatchDriver::InvokeHelper | 자동화 메서드를 호출하기 위한 도우미입니다. |
COleDispatchDriver::ReleaseDispatch | 연결을 해제합니다 IDispatch . |
COleDispatchDriver::SetProperty | Automation 속성을 설정합니다. |
Public 연산자
속성 | 설명 |
---|---|
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
디스패치 개체를 만들려는 자동화 개체의 프로그래밍 ID(예: "Excel.Document.5")에 대한 포인터입니다.
Return Value
성공하면 0이 아닌 값이고, 실패하면 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::DetachDispatch
이 개체에서 현재 IDispatch
연결을 분리합니다.
LPDISPATCH DetachDispatch();
Return Value
이전에 연결된 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 | 변체 |
VT_UNKNOWN | LPUNKNOWN |
pbParamInfo 인수는 공백으로 구분된 VTS_ 상수 목록입니다. 공백(쉼표가 아님)으로 구분된 이러한 값 중 하나 이상이 함수의 매개 변수 목록을 지정합니다. 가능한 값은 EVENT_CUSTOM 매크로를 통해 나열됩니다.
이 함수는 매개 변수를 VARIANTARG 값으로 변환한 다음 IDispatch::Invoke 메서드를 호출합니다. Invoke
호출에 실패하면 이 함수가 예외를 throw합니다. 반환된 IDispatch::Invoke
SCODE(상태 코드)가 DISP_E_EXCEPTION 경우 이 함수는 COleException 개체를 throw하고, 그렇지 않으면 COleDispatchException을 throw합니다.
자세한 내용은 WINDOWS SDK에서 VARIANTARG, IDispatch 인터페이스 구현, IDispatch::Invoke 및 COM 오류 코드 구조를 참조하세요.
예시
COleDispatchDriver::CreateDispatch에 대한 예제를 참조하세요.
COleDispatchDriver::m_bAutoRelease
TRUE이면 ReleaseDispatch가 호출되거나 이 COleDispatchDriver
개체가 제거될 때 m_lpDispatch 액세스하는 COM 개체가 자동으로 해제됩니다.
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
개체의 기본 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
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);
}