Bagikan melalui


Fungsi CoMarshalInterface (combaseapi.h)

Menulis ke dalam aliran data yang diperlukan untuk menginisialisasi objek proksi dalam beberapa proses klien.

Sintaks

HRESULT CoMarshalInterface(
  [in]           LPSTREAM  pStm,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

Parameter

[in] pStm

Penunjuk ke aliran yang akan digunakan selama marshaling. Lihat IStream.

[in] riid

Referensi ke pengidentifikasi antarmuka yang akan dinamai. Antarmuka ini harus berasal dari antarmuka IUnknown .

[in] pUnk

Penunjuk ke antarmuka yang akan dinamai marshal. Antarmuka ini harus berasal dari antarmuka IUnknown .

[in] dwDestContext

Konteks tujuan di mana antarmuka yang ditentukan tidak akan diubah. Nilai yang mungkin berasal dari enumerasi MSHCTX. Saat ini, unmarshaling dapat terjadi di apartemen lain dari proses saat ini (MSHCTX_INPROC), dalam proses lain pada komputer yang sama dengan proses saat ini (MSHCTX_LOCAL), atau dalam proses pada komputer yang berbeda (MSHCTX_DIFFERENTMACHINE).

[in, optional] pvDestContext

Parameter ini dicadangkan dan harus NULL.

[in] mshlflags

Bendera yang menentukan apakah data yang akan dinamai akan ditransmisikan kembali ke proses klien (kasus umum) atau ditulis ke tabel global, di mana data dapat diambil oleh beberapa klien. Nilai yang mungkin berasal dari enumerasi MSHLFLAGS .

Menampilkan nilai

Fungsi ini dapat mengembalikan nilai pengembalian standar E_FAIL, E_OUTOFMEMORY, dan E_UNEXPECTED, nilai kesalahan akses aliran yang dikembalikan oleh IStream, serta nilai berikut.

Menampilkan kode Deskripsi
S_OK
HRESULT berhasil dijadikan marshal.
CO_E_NOTINITIALIZED
Fungsi CoInitialize atau OleInitialize tidak dipanggil pada utas saat ini sebelum fungsi ini dipanggil.

Keterangan

Fungsi CoMarshalInterface marshals antarmuka yang dimaksud oleh riid pada objek yang implementasi IUnknown-nya diacu oleh pUnk. Untuk melakukannya, fungsi CoMarshalInterface melakukan tugas-tugas berikut:

  1. Mengkueri objek untuk penunjuk ke antarmuka IMarshal . Jika objek tidak mengimplementasikan IMarshal, yang berarti mengandalkan COM untuk memberikan dukungan marshaling, CoMarshalInterface mendapatkan penunjuk ke implementasi default COM dari IMarshal.
  2. Mendapatkan CLSID proksi objek dengan memanggil IMarshal::GetUnmarshalClass, menggunakan pointer antarmuka IMarshal mana pun yang telah dikembalikan.
  3. Menulis CLSID proksi ke aliran yang akan digunakan untuk marshaling.
  4. Marshals penunjuk antarmuka dengan memanggil IMarshal::MarshalInterface.
Pustaka COM dalam proses klien memanggil fungsi CoUnmarshalInterface untuk mengekstrak data dan menginisialisasi proksi. Sebelum memanggil CoUnmarshalInterface, cari kembali ke posisi asli di aliran.

Jika Anda menerapkan antarmuka COM yang ada atau menentukan antarmuka Anda sendiri menggunakan Microsoft Interface Definition Language (MIDL), proksi dan stub yang dihasilkan MIDL memanggil CoMarshalInterface untuk Anda. Jika Anda menulis proksi dan stub Anda sendiri, kode proksi dan kode stub Anda masing-masing harus memanggil CoMarshalInterface untuk mengarahkan penunjuk antarmuka marshal dengan benar. Memanggil IMarshal langsung dari kode proksi dan stub Anda tidak disarankan.

Jika Anda menulis implementasi IMarshal Anda sendiri, dan proksi Anda memerlukan akses ke objek privat, Anda dapat menyertakan penunjuk antarmuka ke objek tersebut sebagai bagian dari data yang Anda tulis ke aliran. Dalam situasi seperti itu, jika Anda ingin menggunakan implementasi marshaling default COM saat melewati penunjuk antarmuka, Anda dapat memanggil CoMarshalInterface pada objek untuk melakukannya.

Persyaratan

   
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

CoUnmarshalInterface

IMarshal::MarshalInterface