다음을 통해 공유


IServiceProviderImpl 클래스

이 클래스는 인터페이스의 기본 구현을 IServiceProvider 제공합니다.

구문

template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider

매개 변수

T
에서 파생된 IServiceProviderImpl클래스입니다.

멤버

공용 메서드

이름 설명
IServiceProviderImpl::QueryService 지정된 서비스를 만들거나 액세스하고 서비스의 지정된 인터페이스에 대한 인터페이스 포인터를 반환합니다.

설명

인터페이스는 IServiceProvider GUID로 지정된 서비스를 찾고 서비스에서 요청된 인터페이스에 대한 인터페이스 포인터를 반환합니다. 클래스 IServiceProviderImpl 는 이 인터페이스의 기본 구현을 제공합니다.

IServiceProviderImpl는 지정된 서비스를 만들거나 액세스하고 서비스에 대해 지정된 인터페이스에 대한 인터페이스 포인터를 반환하는 QueryService라는 한 가지 메서드를 지정합니다.

IServiceProviderImpl는 BEGIN_SERVICE_MAP 시작하고 END_SERVICE_MAP 끝나는 서비스 맵을 사용합니다.

서비스 맵에는 개체에서 지원하는 지정된 SID(서비스 ID)를 나타내는 SERVICE_ENTRY다른 개체에 대한 체인을 호출 QueryService 하는 SERVICE_ENTRY_CHAIN 두 개의 항목이 포함됩니다.

상속 계층 구조

IServiceProvider

IServiceProviderImpl

요구 사항

헤더: atlcom.h

IServiceProviderImpl::QueryService

지정된 서비스를 만들거나 액세스하고 서비스의 지정된 인터페이스에 대한 인터페이스 포인터를 반환합니다.

STDMETHOD(QueryService)(
    REFGUID guidService,
    REFIID riid,
    void** ppvObject);

매개 변수

guidService
[in] SID(서비스 식별자)에 대한 포인터입니다.

riid
[in] 호출자가 액세스 권한을 얻을 인터페이스의 식별자입니다.

ppvObj
[out] 요청된 인터페이스에 대한 간접 포인터입니다.

Return Value

반환된 HRESULT 값은 다음 중 하나입니다.

반환 값 의미
S_OK 서비스를 성공적으로 만들거나 검색했습니다.
E_INVALIDARG 하나 이상의 인수가 잘못된 경우
E_OUTOFMEMORY 메모리가 부족하여 서비스를 만들 수 없습니다.
E_UNEXPECTED 알 수 없는 오류가 발생했습니다.
E_NOINTERFACE 요청된 인터페이스가 이 서비스의 일부가 아니거나 서비스를 알 수 없습니다.

설명

QueryService 는 지정된 서비스의 요청된 인터페이스에 대한 간접 포인터를 반환합니다. 호출자는 더 이상 필요하지 않은 경우 이 포인터를 해제할 책임이 있습니다.

호출 QueryService할 때 서비스 식별자(guidService)와 인터페이스 식별자(riid)를 모두 전달합니다. guidService액세스하려는 서비스를 지정하고 riid는 서비스의 일부인 인터페이스를 식별합니다. 그 대가로 인터페이스에 대한 간접 포인터를 받게 됩니다.

인터페이스를 구현하는 개체는 다른 서비스의 일부인 인터페이스를 구현할 수도 있습니다. 다음을 고려하십시오.

  • 이러한 인터페이스 중 일부는 선택 사항일 수 있습니다. 서비스 설명에 정의된 모든 인터페이스가 서비스의 모든 구현 또는 반환된 모든 개체에 반드시 있는 것은 아닙니다.

  • 호출과 QueryInterface달리 다른 서비스 식별자를 전달한다고 해서 반드시 다른 COM(Component Object Model) 개체가 반환되는 것은 아닙니다.

  • 반환된 개체에는 서비스 정의의 일부가 아닌 추가 인터페이스가 있을 수 있습니다.

SID_SMyService 및 SID_SYourService 같은 두 개의 서로 다른 서비스는 둘 다 동일한 인터페이스의 사용을 지정할 수 있습니다. 인터페이스 구현에는 두 서비스 간에 공통된 것이 없을 수 있습니다. 이는 호출(SID_SMyService, IID_IDispatch)이 (SID_SYourService, IID_IDispatch)와 다른 개체 QueryService 를 반환할 수 있기 때문에 QueryService 작동합니다. 개체 ID는 다른 서비스 식별자를 지정할 때 가정되지 않습니다.

참고 항목

클래스 개요