Jenis Blittable dan Non-Blittable

Sebagian besar jenis data memiliki representasi umum dalam memori terkelola dan tidak terkelola dan tidak memerlukan penanganan khusus oleh interop marshaller. Jenis-jenis ini disebut jenis blittable karena tidak memerlukan konversi ketika diteruskan antara kode terkelola dan tidak terkelola.

Struktur yang dikembalikan dari panggilan pemanggilan platform harus berupa tipe yang dapat di-blitable. Pemanggilan platform tidak mendukung struktur yang non-blittable sebagai jenis pengembalian.

Jenis hal berikut dari System namespace layanan adalah jenis yang blittable:

Jenis kompleks berikut ini juga merupakan jenis yang blittable:

  • Array satu dimensi dari jenis primitif blittable, seperti array bilangan bulat. Namun, jenis yang berisi array variabel jenis blittable bukan blittable sendirinya.

  • Jenis nilai terformat yang hanya berisi jenis blittable (dan kelas jika dinamai dapat disusun sebagai jenis yang diformat). Untuk informasi selengkapnya tentang jenis nilai yang diformat, lihat Penyusunan default untuk jenis nilai.

Referensi objek tidak dapat di-blitable. Ini termasuk array referensi ke objek yang dapat di-blittable sendiri. Misalnya, Anda dapat menentukan struktur yang blittable, tetapi Anda tidak dapat menentukan jenis blittable yang berisi array referensi ke struktur tersebut.

Sebagai pengoptimalan, array jenis primitif yang blittable dan kelas yang hanya berisi anggota yang blittable disematkan bukan disalin selama penyusunan. Jenis-jenis ini dapat tampak disusun sebagai parameter Masuk/Keluar ketika pemanggil dan penerima panggilan berada di apartemen yang sama. Namun, jenis ini sebenarnya disusun sebagai Dalam parameter, dan Anda harus menerapkan atribut InAttributedan OutAttribute jika Anda ingin menyusun argumen sebagai parameter Masuk/Keluar.

Beberapa jenis data terkelola memerlukan representasi yang berbeda di lingkungan yang tidak dikelola. Jenis data non-blittable ini harus dikonversi menjadi formulir yang dapat disusun. Misalnya, string terkelola adalah jenis yang non-blittable karena harus dikonversi menjadi objek string sebelum dapat dinamai dapat disusun.

Tabel berikut ini mencantumkan jenis yang non-blittable dari System namespace layanan. Delegasi, yang merupakan struktur data yang merujuk ke metode statis atau ke instans kelas, juga non-blittable.

Jenis non-blittable Deskripsi
System.Array Mengonversi ke array gaya C atau SAFEARRAY.
System.Boolean Mengonversi ke nilai 1, 2, atau 4 byte dengan true sebagai 1 atau -1.
System.Char Mengonversi ke karakter Unicode atau ANSI.
System.Class Mengonversi ke antarmuka kelas.
System.Object Mengonversi ke varian atau antarmuka.
System.Mdarray Mengonversi ke array gaya C atau SAFEARRAY.
System.String Mengonversi ke string yang berakhir dalam referensi nol atau ke BSTR.
System.ValueType Mengonversi ke struktur dengan tata letak memori tetap.
System.Szarray Mengonversi ke array gaya C atau SAFEARRAY.

Jenis kelas dan objek hanya didukung oleh interop COM. Untuk jenis terkait di Visual Basic, C#, dan C++, lihat Gambaran Umum Pustaka Kelas.

Lihat juga