Share via


IPersistStorage::InitNew 메서드(objidl.h)

새 스토리지 개체를 초기화합니다.

구문

HRESULT InitNew(
  [in] IStorage *pStg
);

매개 변수

[in] pStg

초기화할 새 스토리지 개체에 대한 IStorage 포인터입니다. 컨테이너는 스토리지 개체에 중첩된 스토리지 개체를 만듭니다( IStorage::CreateStorage 참조). 그런 다음 컨테이너는 WriteClassStg 함수를 호출하여 CLSID(개체 클래스 식별자)를 사용하여 새 스토리지 개체를 초기화합니다.

반환 값

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

반환 코드 Description
S_OK
메서드가 완료되었습니다.
CO_E_ALREADYINITIALIZED
개체는 IPersistStorage::Load 메서드 또는 IPersistStorage::InitNew 메서드에 대한 이전 호출에 의해 이미 초기화되었습니다.
E_OUTOFMEMORY
메모리 부족으로 인해 스토리지 개체가 초기화되지 않았습니다.
E_FAIL
메모리 부족 이외의 이유로 스토리지 개체가 초기화되지 않았습니다.

설명

컨테이너 애플리케이션은 InsertObject 명령을 사용하여 새 개체를 초기화해야 하는 경우 이 메서드를 호출할 수 있습니다.

IPersistStorage 인터페이스를 지원하는 개체는 실행되는 동안 항상 유효한 스토리지 개체에 액세스할 수 있어야 합니다. 여기에는 개체를 만든 직후에 지속되기 전의 시간이 포함됩니다. 개체의 컨테이너는 IPersistStorage::InitNew 호출을 통해 이 시간 동안 스토리지에 대한 유효한 IStorage 포인터를 개체에 제공해야 합니다. 컨테이너의 상태에 따라 이 목적을 위해 임시 파일을 만들어야 할 수 있습니다.

개체가 IStorage instance 유지하려는 경우 AddRef를 호출하여 참조 수를 증가시켜야 합니다.

IPersistStorage::InitNew를 호출한 후 개체는 로드되거나 실행 중 상태입니다. 예를 들어 개체 클래스에 in-process 서버가 있는 경우 개체가 실행 중 상태가 됩니다. 그러나 개체가 기본 처리기를 사용하는 경우 InitNew 에 대한 컨테이너의 호출은 개체를 실행하지 않는 처리기의 구현만 호출합니다. 나중에 컨테이너가 개체를 실행하는 경우 처리기는 개체에 대한 InitNew 메서드를 호출합니다.

발신자에 대한 참고 사항

IPersistStorage::InitNew를 직접 호출하는 대신 일반적으로 다음을 수행하는 OleCreate 도우미 함수를 호출합니다.
  1. CoCreateInstance 함수를 호출하여 개체 클래스의 instance 만듭니다.
  2. IPersistStorage 인터페이스에 대한 새 instance 쿼리합니다.
  3. InitNew 메서드를 호출하여 개체를 초기화합니다.
컨테이너 애플리케이션은 개체에 대한 이후 작업에서 사용할 개체에 대한 IPersistStorage 포인터를 캐시해야 합니다.

구현자에 대한 참고 사항

IPersistStorage::InitNew 구현은 다음 단계를 수행하여 개체를 기본 상태로 초기화해야 합니다.
  1. 개체가 이 스토리지에 자체 저장해야 하는 모든 스트림 또는 스토리지에 대한 포인터를 미리 열고 캐시합니다.
  2. AddRef를 호출하고 전달된 스토리지 포인터를 캐시합니다.
  3. WriteFmtUserTypeStg 함수를 호출하여 개체의 네이티브 클립보드 형식 및 사용자 형식 문자열을 스토리지 개체에 씁니다.
  4. 개체의 더티 플래그를 설정합니다.
처음 두 단계는 개체가 메모리 부족 상황에서 자신을 저장할 수 있도록 하는 데 특히 중요합니다. 스트림 및 스토리지 인터페이스에 대한 포인터를 미리 열고 유지하면 메모리 부족으로 인해 이 스토리지에 대한 저장 작업이 실패하지 않습니다.

이 메서드가 이미 초기화된 후 IPersistStorage::InitNew 메서드 또는 IPersistStorage::Load 메서드에 대한 호출을 수신하는 경우 이 메서드의 구현은 CO_E_ALREADYINITIALIZED 오류 코드를 반환해야 합니다.

요구 사항

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

추가 정보

IPersistStorage