Atribut C++ untuk COM dan .NET

Microsoft menentukan sekumpulan atribut C++ yang menyederhanakan pemrograman COM dan pengembangan runtime bahasa umum .NET Framework. Saat Anda menyertakan atribut dalam file sumber Anda, pengkompilasi bekerja dengan DLL penyedia untuk menyisipkan kode atau mengubah kode dalam file objek yang dihasilkan. Atribut ini membantu dalam pembuatan file .idl, antarmuka, pustaka jenis, dan elemen COM lainnya. Di lingkungan pengembangan terintegrasi (IDE), atribut didukung oleh wizard dan oleh jendela Properti.

Meskipun atribut menghilangkan beberapa pengkodean terperinci yang diperlukan untuk menulis objek COM, Anda memerlukan latar belakang dalam dasar-dasar COM untuk menggunakannya dengan sebaik-baiknya .

Catatan

Jika Anda mencari atribut standar C++, lihat Atribut.

Tujuan Atribut

Atribut memperluas C++ ke arah yang saat ini tidak dimungkinkan tanpa merusak struktur klasik bahasa. Atribut memungkinkan penyedia (DLL terpisah) untuk memperluas fungsionalitas bahasa secara dinamis. Tujuan utama atribut adalah untuk menyederhanakan penulisan komponen COM, selain meningkatkan tingkat produktivitas pengembang komponen. Atribut dapat diterapkan ke hampir semua konstruksi C++, seperti kelas, anggota data, atau fungsi anggota. Berikut ini adalah sorotan manfaat yang disediakan oleh teknologi baru ini:

  • Mengekspos konvensi panggilan yang akrab dan sederhana.

  • Menggunakan kode yang disisipkan, yang, tidak seperti makro, dikenali oleh debugger.

  • Memungkinkan derivasi mudah dari kelas dasar tanpa detail implementasi yang memberatkan.

  • Mengganti sejumlah besar kode IDL yang diperlukan oleh komponen COM dengan beberapa atribut ringkas.

Misalnya, untuk menerapkan sink peristiwa sederhana untuk kelas ATL generik, Anda dapat menerapkan atribut event_receiver ke kelas tertentu seperti CMyReceiver. Atribut event_receiver kemudian dikompilasi oleh pengkompilasi Microsoft C++, yang menyisipkan kode yang tepat ke dalam file objek.

[event_receiver(com)]
class CMyReceiver
{
   void handler1(int i) { ... }
   void handler2(int i, float j) { ... }
}

Anda kemudian dapat menyiapkan CMyReceiver metode handler1 dan handler2 untuk menangani peristiwa (menggunakan fungsi intrinsik __hook) dari sumber peristiwa, yang dapat Anda buat menggunakan event_source.

Mekanika Dasar Atribut

Ada tiga cara untuk menyisipkan atribut ke dalam proyek Anda. Pertama, Anda dapat memasukkannya secara manual ke dalam kode sumber Anda. Kedua, Anda dapat menyisipkannya menggunakan kisi properti objek dalam proyek Anda. Terakhir, Anda bisa menyisipkannya menggunakan berbagai wizard. Untuk informasi selengkapnya tentang menggunakan jendela Properti dan berbagai wizard, lihat Proyek Visual Studio - C++.

Seperti sebelumnya, ketika proyek dibangun, pengkompilasi mengurai setiap file sumber C++, menghasilkan file objek. Namun, ketika kompilator menemukan atribut, itu diurai dan diverifikasi secara sintetis. Pengkompilasi kemudian secara dinamis memanggil penyedia atribut untuk menyisipkan kode atau melakukan modifikasi lain pada waktu kompilasi. Implementasi penyedia berbeda tergantung pada jenis atribut. Misalnya, atribut terkait ATL diimplementasikan oleh Atlprov.dll.

Gambar berikut menunjukkan hubungan antara pengkompilasi dan penyedia atribut.

Diagram showing component attribute communication.

Catatan

Penggunaan atribut tidak mengubah konten file sumber. Satu-satunya waktu kode atribut yang dihasilkan terlihat adalah selama sesi penelusuran kesalahan. Selain itu, untuk setiap file sumber dalam proyek, Anda dapat menghasilkan file teks yang menampilkan hasil substitusi atribut. Untuk informasi selengkapnya tentang prosedur ini, lihat /Fx (Gabungkan Kode yang Disuntikkan) dan Kode yang disuntikkan Debug.

Seperti kebanyakan konstruksi C++, atribut memiliki serangkaian karakteristik yang menentukan penggunaan yang tepat. Ini disebut sebagai konteks atribut dan dibahas dalam tabel konteks atribut untuk setiap topik referensi atribut. Misalnya, atribut coclass hanya dapat diterapkan ke kelas atau struktur yang ada, dibandingkan dengan atribut cpp_quote , yang dapat dimasukkan di mana saja dalam file sumber C++.

Membangun Program Yang Diatribusikan

Setelah memasukkan atribut Visual C++ ke dalam kode sumber, Anda mungkin ingin pengkompilasi Microsoft C++ menghasilkan pustaka jenis dan file .idl untuk Anda. Opsi linker berikut membantu Anda membangun file .tlb dan .idl:

Beberapa proyek berisi beberapa file .idl independen. Ini digunakan untuk menghasilkan dua atau lebih file .tlb dan secara opsional mengikatnya ke dalam blok sumber daya. Skenario ini saat ini tidak didukung di Visual C++.

Selain itu, linker Visual C++ akan menghasilkan semua informasi atribut terkait IDL ke satu file MIDL. Tidak akan ada cara untuk menghasilkan dua jenis pustaka dari satu proyek.

Konteks Atribut

Atribut C++ dapat dijelaskan menggunakan empat bidang dasar: target yang dapat diterapkan ke (Berlaku Untuk), jika dapat diulang atau tidak (Dapat Diulang), kehadiran atribut lain yang diperlukan (Atribut yang Diperlukan), dan ketidaksesuaian dengan atribut lain (Atribut Tidak Valid). Bidang ini tercantum dalam tabel yang menyertainya dalam topik referensi setiap atribut. Masing-masing bidang ini dijelaskan di bawah ini.

Berlaku Untuk

Bidang ini menjelaskan berbagai elemen bahasa C++ yang merupakan target hukum untuk atribut yang ditentukan. Misalnya, jika atribut menentukan "kelas" di bidang Berlaku Untuk , ini menunjukkan bahwa atribut hanya dapat diterapkan ke kelas C++ legal. Jika atribut diterapkan ke fungsi anggota kelas, kesalahan sintaks akan dihasilkan.

Untuk informasi selengkapnya, lihat Atribut berdasarkan Penggunaan.

Berulang

Bidang ini menyatakan apakah atribut dapat diterapkan berulang kali ke target yang sama. Sebagian besar atribut tidak dapat diulang.

Atribut yang Diperlukan

Bidang ini mencantumkan atribut lain yang perlu ada (yaitu, diterapkan ke target yang sama) agar atribut yang ditentukan berfungsi dengan baik. Tidak jarang atribut memiliki entri apa pun untuk bidang ini.

Atribut Tidak Valid

Bidang ini mencantumkan atribut lain yang tidak kompatibel dengan atribut yang ditentukan. Tidak jarang atribut memiliki entri apa pun untuk bidang ini.

Men-debug kode yang disuntikkan

Menggunakan atribut dapat sangat menyederhanakan pemrograman C++. Untuk informasi selengkapnya, lihat Konsep. Beberapa atribut ditafsirkan langsung oleh pengompilasi. Atribut lain menyuntikkan kode ke sumber program, yang kemudian dikompilasi oleh pengompilasi. Kode yang disuntikkan ini mempermudah pemrograman dengan mengurangi jumlah kode yang harus Anda tulis. Namun, terkadang, bug dapat menyebabkan aplikasi Anda gagal saat menjalankan kode yang disuntikkan. Ketika ini terjadi, Anda mungkin ingin melihat kode yang disuntikkan. Visual Studio menyediakan dua cara bagi Anda untuk melihat kode yang disuntikkan:

  • Anda dapat melihat kode yang disuntikkan di jendela Pembongkaran.

  • Dengan menggunakan /Fx, Anda dapat membuat file sumber gabungan yang berisi kode asli dan disuntikkan.

Jendela Pembongkaran menunjukkan instruksi bahasa perakitan yang sesuai dengan kode sumber dan kode yang disuntikkan oleh atribut. Selain itu, jendela Pembongkaran dapat menampilkan anotasi kode sumber.

Untuk mengaktifkan Anotasi Sumber

  • Klik kanan jendela Pembongkaran, dan pilih Perlihatkan Kode Sumber dari menu pintasan.

    Jika Anda mengetahui lokasi atribut di jendela sumber, Anda dapat menggunakan menu pintasan untuk menemukan kode yang disuntikkan di jendela Pembongkaran.

Untuk melihat kode yang disuntikkan

  1. Debugger harus dalam mode jeda.

  2. Di jendela kode sumber, letakkan kursor di depan atribut yang kode yang disuntikkan yang ingin Anda lihat.

  3. Klik kanan, dan pilih Buka Pembongkaran dari menu pintasan.

    Jika lokasi atribut berada di dekat titik eksekusi saat ini, Anda dapat memilih jendela Pembongkaran dari menu Debug.

Untuk melihat kode pembongkaran pada titik eksekusi saat ini

  1. Debugger harus dalam mode jeda.

  2. Dari menu Debug, pilih Windows, dan klik Pembongkaran.

Di Bagian Ini

Tanya Jawab Umum Pemrograman Atribut
Atribut menurut Grup
Atribut berdasarkan Penggunaan
Referensi Alfabet Atribut