Share via


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 디스패치 인터페이스는 개체의 메서드 및 속성에 대한 액세스를 제공합니다. 형식IDispatchCOleDispatchDriver 디스패치 연결을 연결, 분리, 만들기 및 해제하는 멤버 함수입니다. 다른 멤버 함수는 변수 인수 목록을 사용하여 호출 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하고, 그렇지 않으면 COleDispatchExceptionthrow합니다.

자세한 내용은 WINDOWS SDK에서 VARIANTARG, IDispatch 인터페이스 구현, IDispatch::InvokeCOM 오류 코드 구조를 참조하세요.

예시

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

참고 항목

MFC 샘플 CALCDRIV
MFC 샘플 ACDUAL
계층 구조 차트
CCmdTarget 클래스