다음을 통해 공유


CBindStatusCallback 클래스

이 클래스는 IBindStatusCallback 인터페이스를 구현합니다.

Important

이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다.

구문

template <class T,
    int nBindFlags = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE>
class ATL_NO_VTABLE CBindStatusCallback : public CComObjectRootEx <T ::_ThreadModel::ThreadModelNoCS>,
    public IBindStatusCallbackImpl<T>

매개 변수

T
데이터가 수신될 때 호출될 함수를 포함하는 클래스입니다.

nBindFlags
GetBindInfo에서 반환되는 바인딩 플래그를 지정합니다. 기본 구현은 바인딩을 비동기식으로 설정하고, 최신 버전의 데이터/개체를 검색하며, 검색된 데이터를 디스크 캐시에 저장하지 않습니다.

멤버

공용 생성자

속성 설명
CBindStatusCallback::CBindStatusCallback 생성자입니다.
CBindStatusCallback::~CBindStatusCallback 소멸자입니다.

공용 메서드

이름 설명
CBindStatusCallback::Download 다운로드 프로세스를 시작하고 개체를 만들고 호출StartAsyncDownload하는 CBindStatusCallback 정적 메서드입니다.
CBindStatusCallback::GetBindInfo 만들 바인딩 유형에 대한 정보를 요청하기 위해 비동기 모니커에서 호출됩니다.
CBindStatusCallback::GetPriority 바인딩 작업의 우선 순위를 가져오기 위해 비동기 모니커에서 호출됩니다. ATL 구현은 .를 반환합니다 E_NOTIMPL.
CBindStatusCallback::OnDataAvailable 사용할 수 있게 되면 애플리케이션에 데이터를 제공하기 위해 호출됩니다. 데이터를 읽은 다음, 데이터를 사용하기 위해 전달된 함수를 호출합니다.
CBindStatusCallback::OnLowResource 리소스가 부족할 때 호출됩니다. ATL 구현은 S_OK 반환합니다.
CBindStatusCallback::OnObjectAvailable 애플리케이션에 개체 인터페이스 포인터를 전달하기 위해 비동기 모니커에서 호출됩니다. ATL 구현은 S_OK 반환합니다.
CBindStatusCallback::OnProgress 데이터 다운로드 프로세스의 진행률을 나타내기 위해 호출됩니다. ATL 구현은 S_OK 반환합니다.
CBindStatusCallback::OnStartBinding 바인딩이 시작될 때 호출됩니다.
CBindStatusCallback::OnStopBinding 비동기 데이터 전송이 중지될 때 호출됩니다.
CBindStatusCallback::StartAsyncDownload 사용 가능한 바이트 및 0으로 읽은 바이트를 초기화하고, URL에서 푸시 형식 스트림 개체를 만들고, 데이터를 사용할 수 있게 될 때마다 호출 OnDataAvailable 합니다.

공용 데이터 멤버

이름 설명
CBindStatusCallback::m_dwAvailableToRead 읽을 수 있는 바이트 수입니다.
CBindStatusCallback::m_dwTotalRead 읽은 총 바이트 수입니다.
CBindStatusCallback::m_pFunc 데이터를 사용할 수 있을 때 호출되는 함수에 대한 포인터입니다.
CBindStatusCallback::m_pT 비동기 데이터 전송을 요청하는 개체에 대한 포인터입니다.
CBindStatusCallback::m_spBindCtx 현재 바인딩 작업에 대한 IBindCtx 인터페이스에 대한 포인터입니다.
CBindStatusCallback::m_spBinding IBinding 현재 바인딩 작업의 인터페이스에 대한 포인터입니다.
CBindStatusCallback::m_spMoniker 사용할 URL에 대한 IMoniker 인터페이스에 대한 포인터입니다 .
CBindStatusCallback::m_spStream 데이터 전송을 위한 IStream 인터페이스에 대한 포인터입니다.

설명

CBindStatusCallback 클래스가 IBindStatusCallback 인터페이스를 구현합니다. IBindStatusCallback 는 비동기 데이터 전송에서 알림을 받을 수 있도록 애플리케이션에서 구현해야 합니다. 시스템에서 제공하는 비동기 모니커는 메서드를 사용하여 IBindStatusCallback 개체 간에 비동기 데이터 전송에 대한 정보를 보내고 받습니다.

일반적으로 CBindStatusCallback 개체는 특정 바인딩 작업과 연결됩니다. 예를 들어 ASYNC 샘플에서 URL 속성을 설정할 때 다음 호출Download에 개체를 만듭니다CBindStatusCallback.

STDMETHOD(put_URL)(BSTR newVal)
{
   HRESULT hResult = E_UNEXPECTED;

   ATLTRACE(_T("IATLAsync::put_URL\n"));
   m_bstrURL = newVal;

   if (::IsWindow(m_EditCtrl.m_hWnd))
   {
      ::SendMessage(m_EditCtrl.m_hWnd, WM_SETTEXT, 0,  (LPARAM)_T(""));
      hResult = CBindStatusCallback<CATLAsync>::Download(this, &CATLAsync::OnData, 
         m_bstrURL, m_spClientSite, FALSE);
   }

   return hResult;
}

비동기 모니커는 콜백 함수 OnData 를 사용하여 데이터가 있을 때 애플리케이션을 호출합니다. 비동기 모니커는 시스템에서 제공합니다.

상속 계층 구조

CComObjectRootBase

IBindStatusCallback

CComObjectRootEx

CBindStatusCallback

요구 사항

헤더: atlctl.h

CBindStatusCallback::CBindStatusCallback

생성자입니다.

CBindStatusCallback();

설명

비동기 데이터 전송과 관련된 알림을 받을 개체를 만듭니다. 일반적으로 각 바인딩 작업에 대해 하나의 개체가 만들어집니다.

또한 생성자는 m_pT 초기화하고 NULL로 m_pFunc.

CBindStatusCallback::~CBindStatusCallback

소멸자입니다.

~CBindStatusCallback();

설명

할당된 모든 리소스를 해제합니다.

CBindStatusCallback::Download

CBindStatusCallback 지정된 URL에서 비동기적으로 데이터 다운로드를 시작하는 개체 및 호출 StartAsyncDownload 을 만듭니다.

static HRESULT Download(
    T* pT,
    ATL_PDATAAVAILABLE pFunc,
    BSTR bstrURL,
    IUnknown* pUnkContainer = NULL,
    BOOL bRelative = FALSE);

매개 변수

pT
[in] 비동기 데이터 전송을 요청하는 개체에 대한 포인터입니다. 개체 CBindStatusCallback 가 이 개체의 클래스에 템플릿으로 지정됩니다.

pFunc
[in] 읽은 데이터를 받는 함수에 대한 포인터입니다. 함수는 개체의 형식 T클래스의 멤버입니다. 구문 및 예제는 StartAsyncDownload를 참조하세요.

bstrURL
[in] 데이터를 가져올 URL입니다. 유효한 URL 또는 파일 이름일 수 있습니다. NULL일 수 없습니다. 예시:

CComBSTR mybstr =_T("http://somesite/data.htm")

pUnkContainer
[in] IUnknown 컨테이너의 수입니다. 기본적으로 NULL입니다.

bRelative
[in] URL이 상대 URL인지 절대인지를 나타내는 플래그입니다. 기본적으로 FALSE입니다. 즉, URL이 절대입니다.

Return Value

표준 HRESULT 값 중 하나입니다.

설명

데이터를 사용할 수 있게 될 때마다 .를 통해 OnDataAvailable개체로 전송됩니다. OnDataAvailable는 데이터를 읽고 pFunc에서 가리키는 함수를 호출합니다(예: 데이터를 저장하거나 화면에 인쇄).

CBindStatusCallback::GetBindInfo

모니커에 바인딩하는 방법을 알리기 위해 호출되었습니다.

STDMETHOD(GetBindInfo)(
    DWORD* pgrfBSCF,
    BINDINFO* pbindinfo);

매개 변수

pgrfBSCF
[out] 바인딩 작업이 수행되는 방법을 나타내는 BINDF 열거형 값에 대한 포인터입니다. 기본적으로 다음 열거형 값으로 설정합니다.

비동기 다운로드를 BINDF_ASYNCHRONOUS.

OnDataAvailable BINDF_ASYNCSTORAGE 데이터를 사용할 수 있을 때까지 차단하는 대신 데이터를 아직 사용할 수 없는 경우 E_PENDING 반환합니다.

BINDF_GETNEWESTVERSION 바인딩 작업은 최신 버전의 데이터를 검색해야 합니다.

BINDF_NOWRITECACHE 바인딩 작업은 검색된 데이터를 디스크 캐시에 저장해서는 안 됩니다.

pbindinfo
[in, out] 개체가 바인딩을 BINDINFO 수행하려는 방법에 대한 자세한 정보를 제공하는 구조체에 대한 포인터입니다.

Return Value

표준 HRESULT 값 중 하나입니다.

설명

기본 구현은 바인딩을 비동기식으로 설정하고 데이터 푸시 모델을 사용하도록 설정합니다. 데이터 푸시 모델에서 모니커는 비동기 바인딩 작업을 구동하고 새 데이터를 사용할 수 있을 때마다 클라이언트에 지속적으로 알깁니다.

CBindStatusCallback::GetPriority

바인딩 작업의 우선 순위를 가져오기 위해 비동기 모니커에서 호출됩니다.

STDMETHOD(GetPriority)(LONG* pnPriority);

매개 변수

pnPriority
[out] 성공 시 우선 순위를 받는 LONG 변수의 주소입니다.

Return Value

E_NOTIMPL을 반환합니다.

CBindStatusCallback::m_dwAvailableToRead

읽을 수 있는 바이트 수를 저장하는 데 사용할 수 있습니다.

DWORD m_dwAvailableToRead;

설명

에서 0으로 초기화되었습니다 StartAsyncDownload.

CBindStatusCallback::m_dwTotalRead

비동기 데이터 전송에서 읽은 바이트의 누적 합계입니다.

DWORD m_dwTotalRead;

설명

실제로 읽은 바이트 수로 호출될 때마다 OnDataAvailable 증가합니다. 에서 0으로 초기화되었습니다 StartAsyncDownload.

CBindStatusCallback::m_pFunc

가리키는 m_pFunc 함수는 사용 가능한 데이터를 읽은 후에 호출 OnDataAvailable 됩니다(예: 데이터를 저장하거나 화면에 인쇄).

ATL_PDATAAVAILABLE m_pFunc;

설명

가리키는 m_pFunc 함수는 개체 클래스의 멤버이며 다음 구문을 사용합니다.

void Function_Name(
   CBindStatusCallback<T>* pbsc,
   BYTE* pBytes,
   DWORD dwSize
   );

CBindStatusCallback::m_pT

비동기 데이터 전송을 요청하는 개체에 대한 포인터입니다.

T* m_pT;

설명

개체 CBindStatusCallback 가 이 개체의 클래스에 템플릿으로 지정됩니다.

CBindStatusCallback::m_spBindCtx

바인딩 컨텍스트( 특정 모니커 바인딩 작업에 대한 정보를 저장하는 개체)에 대한 액세스를 제공하는 IBindCtx 인터페이스에 대한 포인터입니다.

CComPtr<IBindCtx> m_spBindCtx;

설명

에서 초기화되었습니다.StartAsyncDownload

CBindStatusCallback::m_spBinding

현재 바인딩 작업의 인터페이스에 대한 포인터 IBinding 입니다.

CComPtr<IBinding> m_spBinding;

설명

에서 OnStartBinding 초기화되고 릴리스되었습니다 OnStopBinding.

CBindStatusCallback::m_spMoniker

사용할 URL에 대한 IMoniker 인터페이스에 대한 포인터입니다 .

CComPtr<IMoniker> m_spMoniker;

설명

에서 초기화되었습니다.StartAsyncDownload

CBindStatusCallback::m_spStream

현재 바인딩 작업의 IStream 인터페이스에 대한 포인터입니다.

CComPtr<IStream> m_spStream;

설명

BCSF 플래그가 STGMEDIUM BCSF_FIRSTDATANOTIFICATION 때 구조체에서 초기화 OnDataAvailable 되고 BCSF 플래그가 BCSF_LASTDATANOTIFICATION 때 해제됩니다.

CBindStatusCallback::OnDataAvailable

시스템에서 제공하는 비동기 모니커 호출 OnDataAvailable 은 사용할 수 있게 되면 개체에 데이터를 제공합니다.

STDMETHOD(
    OnDataAvailable)(DWORD grfBSCF,
    DWORD dwSize,
    FORMATETC* /* pformatetc */,
    STGMEDIUM* pstgmed);

매개 변수

grfBSCF
[in] BSCF 열거형 값입니다. BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION 또는 BSCF_LASTDATANOTIFICATION 중 하나 이상입니다.

dwSize
[in] 바인딩 시작부터 사용할 수 있는 데이터의 누적 양(바이트)입니다. 데이터 양이 관련이 없거나 특정 금액을 사용할 수 없음을 나타내는 0일 수 있습니다.

pformatetc
[in] 사용 가능한 데이터의 형식을 포함하는 FORMATETC 구조체에 대한 포인터입니다. 형식이 없으면 CF_NULL 수 있습니다.

pstgmed
[in] 현재 사용할 수 있는 실제 데이터를 보유하는 STGMEDIUM 구조체에 대한 포인터입니다.

Return Value

표준 HRESULT 값 중 하나입니다.

설명

OnDataAvailable 는 데이터를 읽은 다음 개체 클래스의 메서드를 호출합니다(예: 데이터를 저장하거나 화면에 인쇄). 자세한 내용은 CBindStatusCallback::StartAsyncDownload를 참조하세요.

CBindStatusCallback::OnLowResource

리소스가 부족할 때 호출됩니다.

STDMETHOD(OnLowResource)(DWORD /* dwReserved */);

매개 변수

dwReserved
예약되어 있습니다.

Return Value

S_OK 반환합니다.

CBindStatusCallback::OnObjectAvailable

애플리케이션에 개체 인터페이스 포인터를 전달하기 위해 비동기 모니커에서 호출됩니다.

STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);

매개 변수

riid
요청된 인터페이스의 인터페이스 식별자입니다. 사용되지 않습니다.

punk
IUnknown 인터페이스의 주소입니다. 사용되지 않습니다.

Return Value

S_OK 반환합니다.

CBindStatusCallback::OnProgress

데이터 다운로드 프로세스의 진행률을 나타내기 위해 호출됩니다.

STDMETHOD(OnProgress)(
    ULONG /* ulProgress */,
    ULONG /* ulProgressMax */,
    ULONG /* ulStatusCode */,
    LPCWSTRONG /* szStatusText */);

매개 변수

ulProgress
부호 없는 긴 정수입니다. 사용되지 않습니다.

ulProgressMax
부호 없는 long 정수는 사용되지 않습니다.

ulStatusCode
부호 없는 긴 정수입니다. 사용되지 않습니다.

szStatusText
문자열 값의 주소입니다. 사용되지 않습니다.

Return Value

S_OK 반환합니다.

CBindStatusCallback::OnStartBinding

M_spBinding 데이터 멤버를 pbindingIBinding포인터로 설정합니다.

STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);

매개 변수

dwReserved
향후 사용을 위해 예약되어 있습니다.

pBinding
[in] 현재 바인딩 작업의 IBinding 인터페이스 주소입니다. NULL일 수 없습니다. 클라이언트는 바인딩 개체에 대한 참조를 유지하기 위해 이 포인터에서 AddRef를 호출해야 합니다.

CBindStatusCallback::OnStopBinding

데이터 멤버 m_spBinding 포인터를 해제합니다IBinding.

STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);

매개 변수

hresult
바인딩 작업에서 반환된 상태 코드입니다.

szError
문자열 값의 주소입니다. 사용되지 않습니다.

설명

시스템 제공 비동기 모니커에 의해 호출되어 바인딩 작업의 끝을 나타냅니다.

CBindStatusCallback::StartAsyncDownload

지정된 URL에서 비동기적으로 데이터 다운로드를 시작합니다.

HRESULT StartAsyncDownload(
    T* pT,
    ATL_PDATAAVAILABLE pFunc,
    BSTR bstrURL,
    IUnknown* pUnkContainer = NULL,
    BOOL bRelative = FALSE);

매개 변수

pT
[in] 비동기 데이터 전송을 요청하는 개체에 대한 포인터입니다. 개체 CBindStatusCallback 가 이 개체의 클래스에 템플릿으로 지정됩니다.

pFunc
[in] 읽는 데이터를 받는 함수에 대한 포인터입니다. 함수는 개체의 형식 T클래스의 멤버입니다. 구문 및 예제는 비고를 참조하세요.

bstrURL
[in] 데이터를 가져올 URL입니다. 유효한 URL 또는 파일 이름일 수 있습니다. NULL일 수 없습니다. 예시:

CComBSTR mybstr =_T("http://somesite/data.htm")

pUnkContainer
[in] IUnknown 컨테이너의 수입니다. 기본적으로 NULL입니다.

bRelative
[in] URL이 상대 URL인지 절대인지를 나타내는 플래그입니다. 기본적으로 FALSE입니다. 즉, URL이 절대입니다.

Return Value

표준 HRESULT 값 중 하나입니다.

설명

데이터를 사용할 수 있게 될 때마다 .를 통해 OnDataAvailable개체로 전송됩니다. OnDataAvailable는 데이터를 읽고 pFunc에서 가리키는 함수를 호출합니다(예: 데이터를 저장하거나 화면에 인쇄).

pFunc에서 가리키는 함수는 개체 클래스의 멤버이며 다음 구문을 사용합니다.

void Function_Name(
    CBindStatusCallback<T>* pbsc,
    BYTE* pBytes,
    DWORD dwSize);

다음 예제(ASYNC 샘플에서 가져온)에서 함수 OnData 는 받은 데이터를 텍스트 상자에 씁니다.

예시

void OnData(CBindStatusCallback<CATLAsync>* , BYTE* pBytes, DWORD /*cBytes*/)
{
   ATLTRACE(_T("OnData called\n"));

   m_bstrText.Append((LPCSTR)pBytes);
   if (::IsWindow(m_EditCtrl.m_hWnd))
   {
      USES_CONVERSION;
      _ATLTRY {
         ::SendMessage(m_EditCtrl.m_hWnd, WM_SETTEXT, 0, 
            (LPARAM)(LPCTSTR)COLE2CT((BSTR)m_bstrText));
      }
      _ATLCATCH( e ) {
         e; // unused
         // COLE2CT threw an exception!
         ::SendMessage(m_EditCtrl.m_hWnd, WM_SETTEXT, 0, 
            (LPARAM)_T("Could not allocate enough memory!!!"));
      }
   }
}

참고 항목

클래스 개요