Bagikan melalui


/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.

Lihat juga

Sintaks Baris Perintah MIDL Umum