IPersistStorage::InitNew 메서드(objidl.h)
새 스토리지 개체를 초기화합니다.
구문
HRESULT InitNew(
[in] IStorage *pStg
);
매개 변수
[in] pStg
초기화할 새 스토리지 개체에 대한 IStorage 포인터입니다. 컨테이너는 스토리지 개체에 중첩된 스토리지 개체를 만듭니다( IStorage::CreateStorage 참조). 그런 다음 컨테이너는 WriteClassStg 함수를 호출하여 CLSID(개체 클래스 식별자)를 사용하여 새 스토리지 개체를 초기화합니다.
반환 값
이 메서드는 다음 값을 반환할 수 있습니다.
반환 코드 | Description |
---|---|
|
메서드가 완료되었습니다. |
|
개체는 IPersistStorage::Load 메서드 또는 IPersistStorage::InitNew 메서드에 대한 이전 호출에 의해 이미 초기화되었습니다. |
|
메모리 부족으로 인해 스토리지 개체가 초기화되지 않았습니다. |
|
메모리 부족 이외의 이유로 스토리지 개체가 초기화되지 않았습니다. |
설명
컨테이너 애플리케이션은 InsertObject 명령을 사용하여 새 개체를 초기화해야 하는 경우 이 메서드를 호출할 수 있습니다.
IPersistStorage 인터페이스를 지원하는 개체는 실행되는 동안 항상 유효한 스토리지 개체에 액세스할 수 있어야 합니다. 여기에는 개체를 만든 직후에 지속되기 전의 시간이 포함됩니다. 개체의 컨테이너는 IPersistStorage::InitNew 호출을 통해 이 시간 동안 스토리지에 대한 유효한 IStorage 포인터를 개체에 제공해야 합니다. 컨테이너의 상태에 따라 이 목적을 위해 임시 파일을 만들어야 할 수 있습니다.
개체가 IStorage instance 유지하려는 경우 AddRef를 호출하여 참조 수를 증가시켜야 합니다.
IPersistStorage::InitNew를 호출한 후 개체는 로드되거나 실행 중 상태입니다. 예를 들어 개체 클래스에 in-process 서버가 있는 경우 개체가 실행 중 상태가 됩니다. 그러나 개체가 기본 처리기를 사용하는 경우 InitNew 에 대한 컨테이너의 호출은 개체를 실행하지 않는 처리기의 구현만 호출합니다. 나중에 컨테이너가 개체를 실행하는 경우 처리기는 개체에 대한 InitNew 메서드를 호출합니다.
발신자에 대한 참고 사항
IPersistStorage::InitNew를 직접 호출하는 대신 일반적으로 다음을 수행하는 OleCreate 도우미 함수를 호출합니다.- CoCreateInstance 함수를 호출하여 개체 클래스의 instance 만듭니다.
- IPersistStorage 인터페이스에 대한 새 instance 쿼리합니다.
- InitNew 메서드를 호출하여 개체를 초기화합니다.
구현자에 대한 참고 사항
IPersistStorage::InitNew 구현은 다음 단계를 수행하여 개체를 기본 상태로 초기화해야 합니다.- 개체가 이 스토리지에 자체 저장해야 하는 모든 스트림 또는 스토리지에 대한 포인터를 미리 열고 캐시합니다.
- AddRef를 호출하고 전달된 스토리지 포인터를 캐시합니다.
- WriteFmtUserTypeStg 함수를 호출하여 개체의 네이티브 클립보드 형식 및 사용자 형식 문자열을 스토리지 개체에 씁니다.
- 개체의 더티 플래그를 설정합니다.
이 메서드가 이미 초기화된 후 IPersistStorage::InitNew 메서드 또는 IPersistStorage::Load 메서드에 대한 호출을 수신하는 경우 이 메서드의 구현은 CO_E_ALREADYINITIALIZED 오류 코드를 반환해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | objidl.h |