다음을 통해 공유


CoCreateInstanceEx 함수(combaseapi.h)

특정 컴퓨터에 특정 클래스의 instance 만듭니다.

구문

HRESULT CoCreateInstanceEx(
  [in]      REFCLSID     Clsid,
  [in]      IUnknown     *punkOuter,
  [in]      DWORD        dwClsCtx,
  [in]      COSERVERINFO *pServerInfo,
  [in]      DWORD        dwCount,
  [in, out] MULTI_QI     *pResults
);

매개 변수

[in] Clsid

만들 개체의 CLSID입니다.

[in] punkOuter

이 매개 변수가 NULL이 아닌 경우 는 instance 집계의 일부로 생성되고 있음을 나타내고, punkOuter는 새 instance 제어하는 IUnknown으로 사용됩니다. 집계는 현재 프로세스 간 또는 컴퓨터 간 지원되지 않습니다. 개체를 프로세스에서 인스턴스화할 때 punkOuterNULL이 아닌 경우 CLASS_E_NOAGGREGATION 반환됩니다.

[in] dwClsCtx

CLSCTX 열거형의 값입니다.

[in] pServerInfo

개체를 인스턴스화할 컴퓨터에 대한 정보입니다. COSERVERINFO를 참조하세요. 이 매개 변수는 NULL일 수 있으며, 이 경우 dwClsCtx 매개 변수의 해석에 따라 개체가 로컬 컴퓨터 또는 레지스트리에 지정된 컴퓨터에서 클래스의 RemoteServerName 값으로 인스턴스화됩니다.

[in] dwCount

pResults의 구조체 수입니다. 이 값은 0보다 커야 합니다.

[in, out] pResults

MULTI_QI 구조체의 배열입니다. 각 구조체에는 요청된 인터페이스(pIID)의 식별자, 인터페이스 포인터(pItf)를 반환할 위치 및 QueryInterface 호출의 반환 값(hr)의 세 멤버가 있습니다.

반환 값

이 함수는 E_INVALIDARG 표준 반환 값과 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
성공을 나타냅니다.
REGDB_E_CLASSNOTREG
지정된 클래스가 등록 데이터베이스에 등록되지 않았습니다. CLSCTX 열거형에서 요청한 서버 유형이 등록되지 않았거나 레지스트리의 서버 형식 값이 손상되었음을 나타낼 수도 있습니다.
CLASS_E_NOAGGREGATION
이 클래스는 집계의 일부로 만들 수 없습니다.
CO_S_NOTALLINTERFACES
하나 이상이지만 pResults 배열에서 요청된 모든 인터페이스가 성공적으로 검색되지는 않았습니다. pResults의 각 MULTI_QI 구조체의 hr 멤버는 특정 인터페이스가 반환되었는지 여부를 S_OK 또는 E_NOINTERFACE 나타냅니다.
E_NOINTERFACE
pResults 배열에서 요청된 인터페이스가 성공적으로 검색되지 않았습니다.

설명

CoCreateInstanceEx 는 지정된 원격 컴퓨터에서 지정된 CLSID와 연결된 초기화되지 않은 단일 개체를 만듭니다. 이는 로컬 컴퓨터에만 개체를 만드는 CoCreateInstance 함수의 확장입니다. 또한 단일 인터페이스를 요청하고 해당 인터페이스에 대한 단일 포인터를 가져오는 대신 , CoCreateInstanceEx 를 사용하면 각 구조체 배열을 지정할 수 있으며, 각 구조체는 입력 시 IID(인터페이스 식별자)를 가리키고, 반환 시 요청된 인터페이스에 대한 포인터와 해당 인터페이스에 대한 QueryInterface 호출의 반환 값을 포함합니다. 이렇게 하면 컴퓨터 간 왕복이 줄어듭니다.

이 함수는 세 가지 호출을 캡슐화합니다. 먼저 CoGetClassObject를 호출하여 지정된 CLSID와 연결된 클래스 개체에 연결하고 클래스의 위치를 지정합니다. 둘째, IClassFactory::CreateInstance로 이동하여 초기화되지 않은 instance 만들고 마지막으로 IClassFactory::Release로 이동하여 클래스 개체를 해제합니다.

이렇게 만든 개체는 초기화 인터페이스(예: IPersistStorage::Load) 중 하나에 대한 호출을 통해 초기화되어야 합니다. CoGetInstanceFromFileCoGetInstanceFromIStorage의 두 함수는 명백한 원본에서 instance 만들기 및 초기화를 모두 캡슐화합니다.

pServerInfo 매개 변수로 전달된 COSERVERINFO 구조체에는 지정된 개체의 새 instance 만들 때 COM에서 사용할 보안 설정이 포함되어 있습니다. 이 매개 변수는 인스턴스화된 개체에서 메서드를 호출할 때 사용되는 보안 설정에 영향을 주지 않습니다. 이러한 보안 설정은 CoSetProxyBlanket 함수를 사용하여 인터페이스별로 구성할 수 있습니다. IClientSecurity::SetBlanket도 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 combaseapi.h(Objbase.h 포함)
라이브러리 Ole32.lib
DLL Ole32.dll

추가 정보

CoGetInstanceFromFile

CoGetInstanceFromIStorage