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 ini dinamakan blittable types karena tidak perlu konversi ketika diteruskan antara kode terkelola (managed code) dan kode tidak terkelola (unmanaged code).

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

Jenis-jenis berikut dari namespace System adalah jenis-jenis yang "blittable":

Jenis kompleks berikut ini juga termasuk jenis yang blittable:

  • Array satu dimensi dari tipe primitif yang dapat di-blit, seperti array bilangan bulat. Namun, tipe yang berisi array variabel dari tipe blittable tidak menjadi blittable pada dirinya sendiri.
  • Jenis nilai terformat yang hanya berisi jenis yang dapat di-blittable (dan kelas jika dimarshall sebagai jenis terformat). Untuk informasi selengkapnya tentang jenis nilai yang diformat, lihat Penyusunan default untuk jenis nilai.

Referensi objek tidak dapat di-blittable. Selain itu, array referensi ke objek yang dapat di-blittable sendiri tidak dapat di-blittable. Misalnya, Anda dapat menentukan sebuah struktur yang blittable, tetapi Anda tidak dapat mendefinisikan tipe blittable yang berisi array referensi ke struktur tersebut.

Sebagai pengoptimalan, array tipe primitif yang bisa diakses secara langsung dan kelas yang hanya berisi anggota yang bisa diakses secara langsung disematkan bukan disalin selama marshalling. 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 parameter In, dan Anda harus memperhatikan atribut InAttribute dan OutAttribute jika Anda ingin menyusun argumen sebagai parameter In/Out.

Beberapa jenis data terkelola memerlukan representasi yang berbeda di lingkungan yang tidak dikelola. Jenis data nonblittable ini harus dikonversi menjadi bentuk yang dapat dimarshall. Misalnya, string terkelola adalah jenis yang tidak dapat diblitt karena harus dikonversi menjadi objek string sebelum dapat di-marshall.

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

Jenis tidak 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.String Mengonversi ke string yang berakhir dengan referensi nol atau ke BSTR.
System.ValueType Mengonversi ke struktur dengan tata letak memori tetap.
T[] Mengonversi ke array gaya C atau SAFEARRAY.

Jenis kelas dan objek hanya didukung oleh interop COM.

Lihat juga