Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Microsoft Visual C++.NET (2002) dan Microsoft Visual C++.NET
(2003) mendukung kedua kode dikelola model yang disediakan oleh.NET
Kerangka kerja dan tidak dikelola model kode Windows asli. Informasi ini
Artikel ini berlaku untuk kode Visual C++ unmanaged hanya.
AtlEvnt.exe menunjukkan kepada Anda bagaimana menerapkan acara wastafel menggunakan
kelas ATL IDispEventImpl dan IDispEventSimpleImpl. Untuk kontrol komposit
atau ATL dialog, Wisaya menyisipkan IDispEventImpl dalam daftar warisan untuk
mengatur wastafel. Jadi fokus sampel ini adalah untuk menciptakan tenggelam untuk jenis lainnya
objek COM dan klien. Hal ini hanya berlaku untuk sumber antarmuka dari
jenis dispinterface.
Menggunakan IDispEventImpl ketika Anda memiliki akses ke
Perpustakaan jenis. Menggunakan IDispEventSimpleImpl ketika Anda tidak memiliki akses ke tipe
perpustakaan atau ketika Anda ingin menjadi lebih efisien dengan tidak memuat perpustakaan jenis.
Selain untuk link ke sampel, bagian lebih informasi
Artikel ini mencakup ringkasan proyek dan informasi tentang cara untuk
menerapkan setiap kelas.
Untuk informasi lebih tentang cara men-download berkas Dukungan Microsoft, klik nomor artikel dibawah ini untuk melihat artikel pada Basis Pengetahuan Microsoft:
119591
(http://support.microsoft.com/kb/119591/
)
Cara mendapatkan berkas dukungan Microsoft dari layanan daring
Microsoft telah memindai berkas ini dari virus. Microsoft menggunakan perangkat lunak pendeteksi virus terbaru yang tersedia pada tanggal saat berkas dikirimkan. Berkas tersebut disimpan di server aman, yang membantu mencegah segala perubahan tidak sah terhadap berkas.
Visual C++.NET
Perkecil gambar iniPerbesar gambar ini
Download Atlevntvcnet.exe sekarang
(http://download.microsoft.com/download/visualstudionet/sample/1.11/win98mexp/en-us/Atlevntvcnet.exe)
Tanggal rilis: 25 Juni 2002
Untuk informasi lebih tentang cara men-download berkas Dukungan Microsoft, klik nomor artikel dibawah ini untuk melihat artikel pada Basis Pengetahuan Microsoft:
119591
(http://support.microsoft.com/kb/119591/
)
Cara mendapatkan berkas dukungan Microsoft dari layanan daring
Microsoft telah memindai berkas ini dari virus. Microsoft menggunakan perangkat lunak pendeteksi virus terbaru yang tersedia pada tanggal saat berkas dikirimkan. Berkas tersebut disimpan di server aman, yang membantu mencegah segala perubahan tidak sah terhadap berkas. ATLEVNT kerja terdiri dari
dua proyek, AtlEvnt dan EventSrc. Menggunakan opsi -d ketika Anda menjalankan AtlEvnt.exe:
AtlEvnt Workspace terdiri dari dua proyek, AtlEvnt dan
EventSrc.
Proyek EventSrc adalah default ATL DLL proyek dengan salah satu
"Objek sederhana." Objek sederhana telah tidak ada metode dan telah dimodifikasi untuk
dukungan koneksi poin dan IPersist antarmuka. Objek COM memperlihatkan
sumber standar antarmuka (di bawah) yang memiliki satu metode yang disebut kutu. COM
panggilan objek metode ini pada semua objek wastafel terhubung ke itu, berdasarkan timer:
Proyek AltEvnt adalah sebuah proyek ATL EXE. ATL CDialogImpl kelas
ditambahkan untuk mengubah proyek ke aplikasi sederhana dialog. Empat tenggelam yang
ditambahkan ke proyek (dua menggunakan IDispEventImpl dan menggunakan dua
IDispEventSimpleImpl). Setiap wastafel menggambarkan cara yang berbeda untuk menyediakan
wastafel objek untuk menangani Tick acara ditembakkan oleh objek EventSrc COM.
Kotak dialog memiliki empat tombol dan mengklik tombol memungkinkan
menghubungkan wastafel sesuai ke objek EventSrc COM. Kotak daftar
menampilkan serangkaian bentuk "Sinkn: Tick acara diterima - x" setiap kali kutu
event handler di wastafel disebut. Setelah sambungan dibuat,
tombol dinonaktifkan. Jika ada masalah membangun sambungan, kemudian
tombol teks digantikan dengan serangkaian bentuk "Connect Err-hr" di mana "jam"
mewakili kegagalan HRESULT. Menggunakan alat "Kesalahan LookUp" yang kapal dengan
Visual C++, versi 6.0 untuk mendapatkan penjelasan dari kesalahan.
Untuk menjalankan
ini sampel, pertama membangun proyek EventSrc dan memastikan objek EventSrc
berhasil terdaftar. Kemudian membangun proyek AtlEvnt dan menjalankannya. Sebuah dialog
kotak dengan empat tombol (terlepas dari OK dan membatalkan) dan sebuah kotak daftar akan ditampilkan.
Empat tombol mewakili empat tenggelam. Mengklik tombol menghubungkan tenggelam ke
sumber. Setelah sambungan dibuat, string yang ditambahkan ke daftar kotak setiap
waktu handler disebut.
Langkah-langkah untuk mengimplementasikan IDispEventImpl
Menciptakan kelas baru yang berasal dari IDispEventImpl. Kamu bisa
Klik Kelas baru pada Masukkan menu untuk menghasilkan kelas baru. Untuk masing-masing berbeda wastafel, menambahkan
IDispEventImpl kelas ke daftar warisan dengan ID yang unik sebagai yang pertama
parameter. Wastafel kelas dapat menjadi objek COM (seperti dalam komposit
kontrol) atau kelas yang hanya berasal dari IdispEventImpl:
// Just a sink.
class CSinkObj : public IDispEventImpl<IDC_OBJ, CSinkObj>
{
...
}
-atau-
// COM object that also implements a sink (as in a composite
// control).
class ATL_NO_VTABLE CSinkObj :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSinkObj, &CLSID_SinkObj>,
public IDispatchImpl<ISinkObj, &IID_ISinkObj, &LIBID_SINKPROJLib>,
public IDispEventImpl<IDC_SRCOBJ, CSinkObj>
{
...
}
Anda juga dapat menentukan sumber antarmuka ID, jenis
Perpustakaan ID, besar dan kecil versi jumlah perpustakaan jenis yang berisi
sumber antarmuka secara eksplisit sebagai parameter IdispEventImpl, atau menggunakan
AtlGetObjectSourceInterface() untuk mengekstrak informasi ini dari jenis
perpustakaan. Penggunaan AtlGetObjectSourceInterface() mensyaratkan bahwa objek COM
penembakan acara menerapkan baik IProvideClassInfo2 atau IPersist *:
class CSinkObj : public IDispEventImpl<IDC_OBJ, CSinkObj>
{
...
}
-atau-
class CSinkObj : public IDispEventImpl<IDC_OBJ, CSinkObj,
&DIID__EventSink, // Source interface GUID.
&LIBID_COMOBJLib, // typelib ID containing source interface.
1, // Major version # of LIBID_COMOBJLib.
0> // Minor version # of LIBID_COMOBJLib.
{
...
}
Menambahkan peta wastafel untuk kelas atas dan tenggelam masuk
sesuai dengan setiap peristiwa antarmuka sumber yang Anda ingin
menangani. Menggunakan SINK_ENTRY_EX() ketika antarmuka sumber ditentukan sebagai
parameter dalam IDispEventImpl, sebaliknya, menggunakan SINK_ENTRY():
class CSinkObj : public IDispEventImpl<IDC_SRCOBJ, CSinkObj>
{
public:
BEGIN_SINK_MAP(CSinkObj)
SINK_ENTRY(IDC_SRCOBJ, 1 /*DISPID*/, OnTick /*Event Handler*/)
END_SINK_MAP()
...
}
-atau-
class CSinkObj : public IDispEventImpl<IDC_OBJ, CSinkObj,
&DIID__EventSink, &LIBID_COMOBJLib, 1, 0>
{
public:
BEGIN_SINK_MAP(CSinkObj)
SINK_ENTRY_EX(IDC_SRCOBJ, DIID__EventSink, 1, OnTick)
END_SINK_MAP()
...
}
Tambahkan event handler metode untuk kelas Anda. Pastikan mereka
memiliki __stdcall memanggil Konvensi:
class CSinkObj : public IDispEventImpl<IDC_SRCOBJ, CSinkObj3>
{
public:
BEGIN_SINK_MAP(CSinkObj)
SINK_ENTRY(IDC_SRCOBJ, 1 , OnTick)
END_SINK_MAP()
// event handler for event defined in idl as
// [id(1)] HRESULT Tick([in] long tckcnt);
HRESULT __stdcall OnTick(long tickcnt)
{
ATLTRACE("CSinkObj::OnTick\n");
return S_OK;
}
...
}
Menghubungkan tenggelam ke objek COM dengan menelepon
DispEventAdvise(). Jika antarmuka sumber ditentukan sebagai parameter untuk
IDispEventImpl kemudian panggilan:
// pUnk is the IUnknown pointer of the COM object that fires events.
// pSinkObj is an instance of the CSinkObj class.
pSinkObj->DispEventAdvise(pUnk);
atau hubungi:
// Make sure the COM object corresponding to pUnk implements
// IProvideClassInfo2 or IPersist*.
// Call this method to extract info about source type library if you
// specified only two parameters to IdispEventImpl.
AtlGetObjectSourceInterface(pUnk, &pSinkObj->m_libid,
&pSinkObj->m_iid, &pSinkObj->m_wMajorVerNum,
&pSinkObj->m_wMinorVerNum);
hr = pSinkObj->DispEventAdvise(pUnk, &pSinkObj->m_iid);
Memutus wastafel dengan menelepon DispEventUnadvise():
Langkah-langkah untuk mengimplementasikan IDispEventSimpleImpl
Membuat kelas yang diturunkan dari IDispEventSimpleImpl. The
sumber antarmuka harus ditentukan.
Ikuti langkah 3 di atas kecuali menambahkan SINK_ENTRY_INFO() untuk masing-masing
metode antarmuka sumber yang akan menangani. Sejak
IDispEventSimpleImpl tidak memiliki akses ke perpustakaan jenis yang Anda harus
menyediakan informasi tentang setiap event handler melalui _ATL_FUNC_INFO
struktur, satu untuk setiap event handler.
Alih-alih menentukan
Struktur _ATL_FUNC_INFO di SINK_ENTRY_INFO(), Anda dapat menggunakan SINK_ENTRY_EX()
makro dan menimpa fungsi virtual GetFuncInfoFromId() untuk mengisi
_ATL_FUNC_INFO struktur, seperti yang ditunjukkan dalam kode berikut.
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:194179
(http://support.microsoft.com/kb/194179/en-us/
)
Seberapa besar upaya Anda untuk menggunakan artikel ini?
Sangat sedikit
Sedikit
Sedang
Besar
Sangat besar
Berikan saran tentang apa yang dapat kami lakukan untuk menyempurnakan informasi ini
Terima kasih! Masukan Anda akan digunakan untuk membantu kami meningkatkan konten dukungan. Untuk opsi bantuan lainnya, kunjungi Halaman Beranda Bantuan dan Dukungan.