Bagikan melalui


Metode IPersistStorage::InitNew (objidl.h)

Menginisialisasi objek penyimpanan baru.

Sintaks

HRESULT InitNew(
  [in] IStorage *pStg
);

Parameter

[in] pStg

Penunjuk IStorage ke objek penyimpanan baru yang akan diinisialisasi. Kontainer membuat objek penyimpanan berlapis di objek penyimpanannya (lihat IStorage::CreateStorage). Kemudian, kontainer memanggil fungsi WriteClassStg untuk menginisialisasi objek penyimpanan baru dengan pengidentifikasi kelas objek (CLSID).

Nilai kembali

Metode ini dapat mengembalikan nilai berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil diselesaikan.
CO_E_ALREADYINITIALIZED
Objek telah diinisialisasi oleh panggilan sebelumnya ke metode IPersistStorage::Load atau metode IPersistStorage::InitNew .
E_OUTOFMEMORY
Objek penyimpanan tidak diinisialisasi karena kurangnya memori.
E_FAIL
Objek penyimpanan tidak diinisialisasi karena alasan tertentu selain kurangnya memori.

Keterangan

Aplikasi kontainer dapat memanggil metode ini ketika perlu menginisialisasi objek baru, misalnya, dengan perintah InsertObject.

Objek yang mendukung antarmuka IPersistStorage harus memiliki akses ke objek penyimpanan yang valid setiap saat saat sedang berjalan. Ini termasuk waktu tepat setelah objek dibuat tetapi sebelum dibuat persisten. Kontainer objek harus menyediakan objek dengan pointer IStorage yang valid ke penyimpanan selama waktu ini melalui panggilan ke IPersistStorage::InitNew. Bergantung pada status kontainer, file sementara mungkin harus dibuat untuk tujuan ini.

Jika objek ingin mempertahankan instans IStorage , objek harus memanggil AddRef untuk menambah jumlah referensinya.

Setelah panggilan ke IPersistStorage::InitNew, objek berada dalam status dimuat atau berjalan. Misalnya, jika kelas objek memiliki server dalam proses, objek akan berada dalam status berjalan. Namun, jika objek menggunakan handler default, panggilan kontainer ke InitNew hanya memanggil implementasi handler yang tidak menjalankan objek . Nantinya jika kontainer menjalankan objek , handler memanggil metode InitNew untuk objek .

Catatan untuk Penelepon

Daripada memanggil IPersistStorage::InitNew secara langsung, Anda biasanya memanggil fungsi pembantu OleCreate yang melakukan hal berikut:
  1. Memanggil fungsi CoCreateInstance untuk membuat instans kelas objek.
  2. Mengkueri instans baru untuk antarmuka IPersistStorage .
  3. Memanggil metode InitNew untuk menginisialisasi objek.
Aplikasi kontainer harus menyimpan penunjuk IPersistStorage ke objek untuk digunakan dalam operasi selanjutnya pada objek.

Catatan untuk Pelaksana

Implementasi IPersistStorage::InitNew harus menginisialisasi objek ke status defaultnya, dengan mengambil langkah-langkah berikut:
  1. Buka sebelumnya dan cache pointer ke aliran atau penyimpanan apa pun yang diperlukan objek untuk menyimpan dirinya ke penyimpanan ini.
  2. Panggil AddRef dan cache pointer penyimpanan yang diteruskan.
  3. Panggil fungsi WriteFmtUserTypeStg untuk menulis format clipboard asli dan string jenis pengguna untuk objek ke objek penyimpanan.
  4. Atur bendera kotor untuk objek .
Dua langkah pertama sangat penting untuk memastikan bahwa objek dapat menyimpan dirinya dalam situasi memori rendah. Pra-pembukaan dan penahanan ke pointer ke antarmuka aliran dan penyimpanan menjamin bahwa operasi penyimpanan ke penyimpanan ini tidak akan gagal karena memori yang tidak mencukup.

Implementasi Anda dari metode ini harus mengembalikan kode kesalahan CO_E_ALREADYINITIALIZED jika menerima panggilan ke metode IPersistStorage::InitNew atau metode IPersistStorage::Load setelah sudah diinisialisasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header objidl.h

Lihat juga

IPersistStorage