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