IMoniker::BindToStorage 메서드(objidl.h)

지정된 개체의 스토리지에 바인딩합니다. IMoniker::BindToObject 메서드와 달리 이 메서드는 모니커로 식별된 개체를 활성화하지 않습니다.

구문

HRESULT BindToStorage(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [in]  REFIID   riid,
  [out] void     **ppvObj
);

매개 변수

[in] pbc

이 바인딩 작업에 사용되는 바인딩 컨텍스트 개체의 IBindCtx 인터페이스에 대한 포인터입니다. 바인딩 컨텍스트는 바인딩 프로세스 중에 바인딩된 개체를 캐시하고, 바인딩 컨텍스트를 사용하여 모든 작업에 적용되는 매개 변수를 포함하며, 모니커 구현이 해당 환경에 대한 정보를 검색해야 하는 수단을 제공합니다.

[in] pmkToLeft

모니커가 복합 모니커의 일부인 경우 이 모니커의 왼쪽에 있는 모니커를 가리키는 포인터입니다. 이 매개 변수는 주로 모니커 구현자가 복합 모니커의 다양한 구성 요소 간의 협력을 가능하게 하는 데 사용됩니다. 모니커 클라이언트는 NULL을 사용해야 합니다.

[in] riid

ppvObj에서 포인터가 반환되는 요청된 스토리지 인터페이스의 식별자에 대한 참조입니다. 일반적으로 요청되는 스토리지 인터페이스에는 IStorage, IStreamILockBytes가 포함됩니다.

[out] ppvObj

riid에서 요청된 인터페이스 포인터를 수신하는 포인터 변수의 주소입니다. 반환이 성공하면 *ppvObj 에는 모니커가 식별하는 개체의 스토리지에 대한 요청된 인터페이스 포인터가 포함됩니다. 성공하면 구현은 스토리지에서 AddRef 를 호출해야 합니다. 릴리스를 호출하는 것은 호출자의 책임입니다. 오류가 발생하면 *ppvObjNULL이어야 합니다.

반환 값

이 메서드는 E_UNEXPECTED 표준 반환 값과 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
바인딩 작업이 성공했습니다.
MK_E_NOSTORAGE
이 모니커로 식별된 개체에는 자체 스토리지가 없습니다.
MK_E_EXCEEDEDDEADLINE
바인딩 컨텍스트의 BIND_OPTS 구조에 지정된 시간 제한 내에서 바인딩 작업을 완료할 수 없습니다.
MK_E_CONNECTMANUALLY
네트워크 디바이스를 연결할 수 없기 때문에 작업이 스토리지에 연결할 수 없습니다. 자세한 내용은 IMoniker::BindToObject를 참조하세요.
MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
중간 개체를 찾았지만 바인딩 작업을 완료하는 데 필요한 인터페이스를 지원하지 않았습니다. 예를 들어 항목 모니커는 컨테이너가 IOleItemContainer 인터페이스를 지원하지 않는 경우 이 값을 반환합니다.
STG_E_ACCESSDENIED
스토리지 개체에 액세스할 수 없습니다.
 

이 메서드는 IOleItemContainer::GetObject 메서드와 연결된 오류를 반환할 수도 있습니다.

설명

BindToObjectBindToStorage 메서드 간에는 중요한 차이점이 있습니다. 예를 들어 스프레드시트 개체를 식별하는 모니커가 있는 경우 BindToObject 를 호출하면 스프레드시트 개체 자체에 액세스할 수 있고 BindToStorage 를 호출하면 스프레드시트가 있는 스토리지 개체에 액세스할 수 있습니다.

발신자에 대한 참고 사항

COM 모니커 클래스 중 어느 것도 바인딩 작업에서 이 메서드를 호출하지 않지만 새 모니커 클래스의 구현에서 호출하는 것이 적절할 수 있습니다. pmkToLeft 매개 변수로 식별된 개체의 정보가 필요하고 활성화 없이 개체의 영구 스토리지에서 가져올 수 있는 BindToObject 구현에서 이 메서드를 호출할 수 있습니다. 예를 들어 모니커를 사용하여 컨테이너를 활성화하지 않고 활성화할 수 있는 개체를 식별하는 경우 이 메서드가 유용할 수 있습니다.

모니커가 식별하는 개체의 스토리지를 읽을 수 있는 클라이언트도 이 메서드를 호출할 수 있습니다.

구현자에 대한 참고 사항

구현은 현재 모니커로 식별된 개체에 대한 영구 스토리지를 찾고 원하는 인터페이스 포인터를 반환해야 합니다. 모니커의 일부 유형은 자체 영구 스토리지가 없는 개체인 의사 개체를 나타냅니다. 이러한 개체는 컨테이너의 내부 상태의 일부(예: 스프레드시트의 셀 범위)를 구성합니다. 모니커 클래스가 이러한 유형의 개체를 식별하는 경우 BindToStorage 구현에서 오류 MK_E_NOSTORAGE 반환해야 합니다.

바인딩 컨텍스트의 BIND_OPTS 구조가 BINDFLAGS_JUSTTESTEXISTENCE 플래그를 지정하는 경우 구현에는 ppvObj에서 NULL을 반환하는 옵션이 있습니다(플래그를 무시하고 전체 바인딩 작업을 수행할 수도 있음).

구현별 참고 사항

구현 참고
안티 모니커 이 메서드는 E_NOTIMPL 반환합니다.
클래스 모니커 이 메서드는 클래스 모니커의 BindToObject로 전달됩니다.
파일 모니커 이 메서드는 모니커가 나타내는 경로로 지정된 파일을 열고 해당 파일에 대한 IStorage 포인터를 반환합니다. 메서드는 IStorage 인터페이스에 대한 바인딩만 지원합니다. iStream 또는 ILockBytesriid에서 요청되면 메서드는 E_UNSPEC 반환하고 다른 인터페이스가 요청되면 이 메서드는 E_NOINTERFACE 반환합니다. pmkToLeft가 클래스 모니커가 아닌 경우 iMoniker::BindToObject 구현과 같이 pmkToLeftNULL이어야 합니다.
제네릭 복합 모니커 이 메서드는 복합의 가장 오른쪽 구성 요소에서 BindToStorage 를 재귀적으로 호출하여 나머지 복합 요소를 해당 호출에 대한 pmkToLeft 매개 변수로 전달합니다.
항목 모니커 pmkToLeftNULL이면 이 메서드는 E_INVALIDARG 반환합니다. 그렇지 않으면 메서드는 pmkToLeft 매개 변수에서 IMoniker::BindToObject를 호출하고 IOleItemContainer 인터페이스 포인터를 요청합니다. 그런 다음 메서드는 요청된 인터페이스에 대해 IOleItemContainer::GetObjectStorage 를 호출합니다.
OBJREF 모니커 이 메서드는 실행 중인 개체를 포함하는 스토리지의 요청된 인터페이스에 대한 마샬링된 포인터를 가져옵니다. OBJREF 모니커는 실행 중인 개체를 나타내므로 활성화가 발생하지 않습니다. 표시된 개체가 더 이상 실행되고 있지 않으면 BindToStorage 가 E_UNEXPECTED 함께 실패합니다.
포인터 모니커 이 메서드는 요청된 인터페이스에 대해 래핑된 포인터를 쿼리합니다.
URL 모니커 URL 모니커의 시스템 구현은 지정된 리소스가 복합 파일인 경우 모든 URL의 스트림 개체 및 스토리지 개체에 대해 BindToStorage 를 지원합니다.

URL 모니커는 비동기 바인딩을 지원하므로 BindToStorage 의 실제 반환 값은 바인딩 컨텍스트에 설정된 개체 매개 변수에 따라 달라질 수 있습니다. 그러나 바인딩 작업의 의미 체계는 다음과 같이 동기 또는 비동기 사용에 관계없이 동일합니다.

  • URL 모니커는 바인딩 컨텍스트에서 바인딩 작업에 대한 추가 정보를 가져옵니다. 예를 들어 모니커는 바인딩 컨텍스트에 등록된 IBindStatusCallbackIEnumFORMATETC 인터페이스에 대한 포인터를 가져올 수 있습니다. 추가 정보에는 iBindCtx::SetBindOptions를 통해 바인딩 컨텍스트에 지정된 추가 바인딩 옵션(예: dwTickCountDeadline 매개 변수 또는 BIND_MAYBOTHERUSER grfFlags 값)이 포함될 수 있습니다. 그런 다음, 모니커는 IBindStatusCallback::GetBindInfo 를 호출하여 클라이언트를 쿼리하고 전송을 사용하여 바인딩 작업을 시작하고 IBindStatusCallback::OnStartBinding을 호출하여 결과 IBinding을 클라이언트에 전달합니다.
  • 호출자가 IBindStatusCallback::GetBindInfo에서 검색된 BINDINFO 구조체에서 BINDF_ASYNCSTORAGE 플래그를 지정하여 비동기 IStream 또는 IStorage를 요청한 경우 URL 모니커는 가능한 한 빨리 개체를 반환합니다. 아직 사용할 수 없는 데이터를 참조하는 이러한 IStorage 또는 IStream 개체에 대한 호출은 E_PENDING 반환합니다.
  • 호출자가 위에서 설명한 대로 비동기 IStream 또는 IStorage 를 지정하지 않으면 URL 모니커는 가능한 한 빨리 IBindStatusCallback::OnDataAvailable 메서드를 통해 개체를 반환합니다. 그러나 아직 사용할 수 없는 데이터를 참조하는 이러한 개체에 대한 호출은 데이터를 사용할 수 있게 될 때까지 차단됩니다. 일부 애플리케이션의 경우 기존 I/O 코드를 최소로 수정해야 하지만 액세스 패턴에 따라 성능이 향상될 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 objidl.h

추가 정보

Imoniker