/cstruct_out switch
Sakelar ini memodifikasi definisi C antarmuka COM yang mengembalikan struktur agar sesuai dengan ABI yang akan disediakan implementer C++.
midl /cstruct_out
Opsi Sakelar
Sakelar ini tidak memiliki parameter.
Keterangan
Beberapa definisi antarmuka (terutama yang ada di d3d12.idl
) berisi __stdcall
metode yang mengembalikan struktur. C dan C++ ABIs dari MSVC berbeda dalam bagaimana mereka menerapkan fungsi tersebut:
- C memperlakukannya sebagai fungsi biasa yang mengambil pointer tersembunyi
this
sebagai parameter pertama. Komplotan menerapkan pengoptimalan struct kecil yang memungkinkan struktur yang lebih kecil dari 8 byte (atau lebih besar jika semua nilai floating point) dikembalikan dalam register. Hanya struktur yang lebih besar yang dipromosikan untuk menggunakan parameter tersembunyi dan nilai pengembalian yang dialokasikan pemanggil. - C++ memperlakukan mereka sebagai fungsi anggota. Pengkompilasi selalu melakukannya dengan menyisipkan parameter tersembunyi (penunjuk ke nilai pengembalian yang dialokasikan pemanggil) sebagai parameter kedua, setelah
this
penunjuk. Ini juga mengembalikan penunjuk yang sama dengan nilai pengembaliannya.
Sakelar ini memaksa definisi antarmuka C di header yang dihasilkan untuk mengasumsikan bahwa pelaksana menggunakan C++, dan bahwa kode C harus secara eksplisit menggunakan C++ ABI. Ini menyiratkan bahwa fungsi menyertakan parameter tersembunyi untuk penunjuk nilai yang dikembalikan dan mengembalikan penunjuk tersebut alih-alih struktur secara langsung.