Bagikan melalui


Antarmuka IMessageFilter (objidl.h)

Menyediakan server dan aplikasi COM dengan kemampuan untuk menangani pesan COM masuk dan keluar secara selektif sambil menunggu respons dari panggilan sinkron. Memfilter pesan membantu memastikan bahwa panggilan ditangani dengan cara yang meningkatkan performa dan menghindari kebuntuan. Pesan COM dapat disinkronkan, asinkron, atau disinkronkan input; sebagian besar panggilan antarmuka sinkron.

Warisan

Antarmuka IMessageFilter mewarisi dari antarmuka IUnknown . IMessageFilter juga memiliki jenis anggota berikut:

Metode

Antarmuka IMessageFilter memiliki metode ini.

 
IMessageFilter::HandleInComingCall

Menyediakan satu titik masuk untuk panggilan masuk.
IMessageFilter::MessagePending

Menunjukkan bahwa pesan telah tiba saat COM sedang menunggu untuk merespons panggilan jarak jauh.
IMessageFilter::RetryRejectedCall

Memberi aplikasi kesempatan untuk menampilkan kotak dialog yang menawarkan opsi coba lagi, batalkan, atau pengalihan tugas.

Keterangan

Panggilan sinkron mengharuskan penelepon menunggu balasan sebelum melanjutkan. COM memasukkan perulangan modal saat menunggu balasan. Selama waktu ini, penelepon masih dapat menerima dan mengirimkan pesan masuk.

Panggilan asinkron memungkinkan penelepon untuk melanjutkan tanpa menunggu respons dari objek yang disebut. Hari ini, dalam COM, satu-satunya panggilan asinkron adalah ke antarmuka IAdviseSink objek. Saat objek memproses panggilan asinkron, objek dilarang melakukan panggilan sinkron kembali ke objek panggilan.

Untuk mengaktifkan perilaku seperti manajemen fokus dan type-ahead agar berfungsi dengan benar, panggilan yang disinkronkan input memerlukan objek yang dipanggil untuk menyelesaikan panggilan sebelum melepaskan kontrol.

Penonaktifan Aplikasi dengan WM_QUERYENDSESSION dan WM_ENDSESSION

Ketika pengguna keluar dari Windows, setiap aplikasi yang terbuka menerima pesan WM_QUERYENDSESSION diikuti dengan pesan WM_ENDSESSION , asalkan keluar tidak dibatalkan. Pesan-pesan ini dipanggil dengan fungsi SendMessage , yang sayangnya membatasi inisiasi semua panggilan LRPC keluar. Ini adalah masalah untuk aplikasi kontainer yang memiliki objek tersemat terbuka ketika mereka menerima permintaan matikan karena LRPC diperlukan untuk menutup objek tersebut.

Aplikasi kontainer dan kontainer/server dengan dokumen terbuka biasanya menampilkan kotak pesan pada tanda terima pesan WM_QUERYENDSESSION yang menanyakan apakah pengguna ingin menyimpan perubahan sebelum keluar. Respons positif biasanya default. Rekomendasi untuk menangani situasi yang dijelaskan di atas adalah agar aplikasi menampilkan kotak pesan alternatif yang menanyakan apakah pengguna ingin membuang perubahan; respons negatif harus menjadi default. Jika pengguna memilih untuk membuang perubahan, TRUE harus dikembalikan untuk WM_QUERYENDSESSION, yang memberi sinyal ke Windows bahwa perubahan tersebut dapat dihentikan. Jika pengguna tidak ingin membuang perubahan, FALSE harus dikembalikan. Tidak ada upaya yang harus dilakukan untuk menutup atau melepaskan penyematan yang berjalan.

Aplikasi server harus mengembalikan TRUE untuk WM_QUERYENDSESSION tanpa meminta pengguna. Pada penerimaan pesan WM_ENDSESSION , semua aplikasi COM harus menjalankan urutan penutupan normal untuk setiap dokumen dan objek aplikasi. Pada saat yang sama, Anda harus mengabaikan kesalahan apa pun yang dihasilkan dari panggilan atau panggilan lintas proses ke IUnknown::Release. Semua pointer penyimpanan (penunjuk antarmuka IStorage dan IStream ) harus dilepaskan untuk membersihkan file sementara yang dikelola oleh implementasi file gabungan penyimpanan terstruktur.

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