Bagikan melalui


Menargetkan Stub untuk Platform 32-bit atau 64-bit Tertentu

Beberapa fitur Microsoft RPC dan MIDL 3.0 dan yang lebih baru adalah khusus platform.

Sebagai tindakan pencegahan, kompilator MIDL 3.0 dan yang lebih baru menghasilkan penjaga yang memfasilitasi pemeriksaan kompatibilitas selama fase kompilasi C. MIDL menghasilkan dua jenis penjaga: penjaga yang bergantung pada platform (32-bit versus 64-bit) dan pelindung dependen rilis (dependensi set fitur). Misalnya, MIDL menghasilkan penjaga berikut untuk mencegah kompilasi C dari stub 32-bit untuk platform lain:

#if !defined(__RPC_WIN32__)
#error  Invalid build platform for this stub.
#endif

Pelindung dependen rilis dipicu oleh serangkaian fitur yang ditemukan dalam file IDL yang diproses dan oleh sakelar /target . Misalnya, jika antarmuka menggunakan fitur yang hanya didukung pada Windows 2000 atau yang lebih baru, MIDL menghasilkan penjaga dengan makro TARGET_IS_NT50_OR_LATER.

Makro penjaga, yang didefinisikan dalam Rpcndr.h, tergantung pada pengaturan WINVER dan _WIN32_WINNT dan dievaluasi oleh pengkompilasi C/C++.

Jika, pada waktu kompilasi C, Anda mendapatkan pesan kesalahan yang menunjukkan bahwa Anda memerlukan platform tertentu untuk menjalankan stub, pertama-tama periksa untuk memastikan Anda belum menggunakan fitur yang tidak tersedia di platform ini. Fitur yang memicu penjaga tertentu tercantum dalam tubuh penjaga. Dalam contoh sebelumnya, sakelar kompilator -Oicf memicu penjaga. Fitur penting dari jenis ini termasuk sakelar /robust dan atribut [asinkron] yang tersedia pada Windows 2000 dan yang lebih baru, konstruktor jenis pipa, opsi pengompilasi /Oif, dan atribut [user_marshal] dan [wire_marshal]. Stub yang menggunakan fitur-fitur ini tidak akan berjalan pada sistem sebelumnya.

Jika Anda tahu bahwa platform target Anda benar untuk fitur yang Anda gunakan dan masih menerima kesalahan, Anda mungkin perlu mengatur variabel lingkungan dengan tepat.

Untuk membangun rilis Windows 2000 atau yang lebih baru

  • Tambahkan baris ini ke makefile Anda:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/Target

/Kuat

async

async_uuid

/Oi

Pipa

wire_marshal

user_marshal

Marshaling Tipe Data OLE