IObjectContext::CreateInstance 메서드(comsvcs.h)

현재 개체의 컨텍스트를 사용하여 개체를 만듭니다.

구문

HRESULT CreateInstance(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

매개 변수

[in] rclsid

인스턴스화할 개체 형식의 CLSID입니다.

[in] riid

인스턴스화하려는 개체에 의해 구현되는 모든 인터페이스입니다.

[out] ppv

새 개체의 요청된 인터페이스에 대한 참조입니다. 인스턴스화에 실패하면 이 매개 변수는 NULL로 설정됩니다.

반환 값

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

반환 코드 Description
S_OK
메서드가 완료되었습니다.
REGDB_E_CLASSNOTREG
clsid로 지정된 구성 요소가 COM 구성 요소로 등록되지 않았습니다.
E_OUTOFMEMORY
개체를 인스턴스화하는 데 사용할 수 있는 메모리가 부족합니다.
E_INVALIDARG
ppvObj 매개 변수에 전달된 인수가 잘못되었습니다.
E_UNEXPECTED
예기치 않은 오류가 발생했습니다. 이 문제는 한 개체가 IObjectContext 포인터를 다른 개체에 전달하고 다른 개체가 이 포인터를 사용하여 CreateInstance 를 호출하는 경우에 발생할 수 있습니다. IObjectContext 포인터는 원래 가져온 개체의 컨텍스트 외부에서 유효하지 않습니다.

설명

CreateInstance는 COM 개체를 만듭니다. 그러나 해당 구성 요소가 COM+에 등록된 경우에만 개체에 컨텍스트가 있습니다.

CreateInstance를 사용하여 개체를 만들 때 새 개체의 컨텍스트는 현재 개체의 IObjectContext 및 새 개체 구성 요소의 선언적 속성에서 파생됩니다. 새 개체는 항상 개체를 만든 개체와 동일한 작업 내에서 실행됩니다. 현재 개체에 트랜잭션이 있는 경우 새 개체 구성 요소의 트랜잭션 특성은 새 개체가 해당 트랜잭션의 scope 내에서 실행되는지 여부를 결정합니다.

구성 요소의 트랜잭션 특성 설정에 트랜잭션이 필요하거나 트랜잭션을 지원하는 경우 새 개체는 작성자의 트랜잭션을 상속합니다. 구성 요소의 트랜잭션 특성에 새 트랜잭션이 필요한 경우 COM+는 새 개체에 대한 새 트랜잭션을 시작합니다. 구성 요소의 트랜잭션 특성이 트랜잭션을 지원하지 않는 경우 새 개체는 트랜잭션에서 실행되지 않습니다.

CreateInstance 는 항상 새로 인스턴스화된 개체에서 IUnknown 인터페이스를 반환합니다. 반환된 값을 새 개체와 통신하려는 인터페이스로 즉시 캐스팅해야 합니다. riid 매개 변수에 전달하는 인터페이스 ID는 반환된 값을 캐스팅하는 인터페이스와 동일할 필요는 없지만 인스턴스화하는 개체에 의해 구현되는 인터페이스여야 합니다.

요구 사항

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

추가 정보

IObjectContext