Bagikan melalui


Fungsi CoReleaseMarshalData (combaseapi.h)

Menghancurkan paket data yang sebelumnya di-marshalasi.

Sintaks

HRESULT CoReleaseMarshalData(
  [in] LPSTREAM pStm
);

Parameter

[in] pStm

Penunjuk ke aliran yang berisi paket data yang akan dihancurkan. Lihat IStream.

Nilai kembali

Fungsi ini dapat mengembalikan nilai pengembalian standar E_FAIL, E_INVALIDARG, E_OUTOFMEMORY, dan E_UNEXPECTED, serta nilai berikut.

Menampilkan kode Deskripsi
S_OK
Paket data berhasil dihancurkan.
STG_E_INVALIDPOINTER
Kesalahan yang terkait dengan parameter pStm .
CO_E_NOTINITIALIZED
Fungsi CoInitialize atau OleInitialize tidak dipanggil pada utas saat ini sebelum fungsi ini dipanggil.

Keterangan

Penting  

Catatan Keamanan: Memanggil metode ini dengan data yang tidak tepercaya adalah risiko keamanan. Panggil metode ini hanya dengan data tepercaya.

 
Fungsi CoReleaseMarshalData melakukan tugas-tugas berikut:
  1. Fungsi ini membaca CLSID dari aliran.
  2. Jika implementasi marshaling default COM sedang digunakan, fungsi mendapatkan penunjuk IMarshal ke instans unmarshaler standar. Jika marshaling kustom sedang digunakan, fungsi membuat proksi dengan memanggil fungsi CoCreateInstance , meneruskan CLSID yang dibacanya dari aliran, dan meminta penunjuk antarmuka IMarshal ke proksi yang baru dibuat.
  3. Dengan menggunakan penunjuk antarmuka IMarshal mana pun yang diperolehnya, fungsi memanggil IMarshal::ReleaseMarshalData.
Anda biasanya tidak memanggil fungsi ini. Satu-satunya situasi di mana Anda mungkin perlu memanggil fungsi ini adalah jika Anda menggunakan marshaling kustom (tulis dan gunakan implementasi IMarshal Anda sendiri). Contoh kapan CoReleaseMarshalData harus dipanggil termasuk situasi berikut:
  • Upaya dilakukan untuk membatalkan abaikan paket data, tetapi gagal.
  • Paket data marshaled dihapus dari tabel global.
Sebagai analogi, paket data dapat dianggap sebagai referensi ke objek asli, sama seperti jika itu adalah penunjuk antarmuka lain yang ditahan pada objek. Seperti penunjuk antarmuka nyata, paket data tersebut harus dirilis di beberapa titik. Penggunaan IMarshal::ReleaseMarshalData untuk merilis paket data dianalogikan dengan penggunaan IUnknown::Release untuk merilis pointer antarmuka.

Perhatikan bahwa Anda tidak perlu memanggil CoReleaseMarshalData setelah panggilan yang berhasil dari fungsi CoUnmarshalInterface ; fungsi tersebut merilis data marshal sebagai bagian dari pemrosesan yang dilakukannya.

Penting Anda harus memanggil fungsi CoReleaseMarshalData di apartemen yang sama yang memanggil CoMarshalInterface untuk mendampingi objek ke aliran. Kegagalan untuk melakukan ini dapat menyebabkan referensi objek yang dipegang oleh paket marshaled di aliran bocor.
 

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows 2000 Server [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header combaseapi.h (termasuk Objbase.h)
Pustaka Ole32.lib
DLL Ole32.dll

Lihat juga

IMarshal::ReleaseMarshalData