Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Terkadang, program sengaja atau tidak sengaja menyembunyikan informasi dari mesin marshaling RPC. Beberapa contohnya adalah sebagai berikut:
- Mengirim struktur data sebagai blok byte yang tidak terbedakan
- Memaksimalkan performa dengan menggunakan dampak tambahan dari sebuah metode untuk menyalurkan data ekstra melalui jaringan
- Mencoba menyamarkan handel dengan meneruskannya sebagai DWORD atau ULONG
Teknik ini hampir dijamin untuk memperkenalkan masalah kompatibilitas bahkan sebelum Anda memindahkan aplikasi Anda ke Windows 64-bit.
Alih-alih mengirim konteks server sebagai DWORD dalam panggilan prosedur jarak jauh standar, gunakan handel konteks untuk menyediakan handel buram ke konteks server yang dipegang atas nama klien. Konteks diidentifikasi oleh GUID yang ditentukan oleh waktu proses RPC saat server membuat penanganan konteks untuk klien. Tidak ada pointer yang digunakan melalui kawat dan operasi sepenuhnya transparan di seluruh batas 32 atau 64-bit. Untuk informasi selengkapnya tentang cara menggunakan context handles, lihat Context Handles.
Antarmuka DCOM tidak dapat menggunakan handel konteks karena COM menyediakan manajemen konteksnya sendiri. Alih-alih membuat handle konteks, Anda dapat meneruskan penunjuk antarmuka ke objek COM. Kemudian Anda dapat memanggil metode langsung melalui penunjuk antarmuka atau menempatkan pointer di dalam panggilan lain. Untuk merilis objek server, klien memanggil metode Rilis antarmuka melalui penunjuk antarmuka.
Sekali lagi, mungkin ada kalanya Anda tidak dapat mengubah desain asli kode yang Anda porting. Jika tidak ada cara untuk menghindari pengiriman pointer melalui jaringan sebagai DWORD, Anda harus menerapkan beberapa bentuk pemetaan pada sisi server antara nilai DWORD dan pointer. Salah satu cara untuk melakukan ini adalah dengan mengubah pointer di aplikasi sisi klien menjadi jenis presisi pointer, seperti ULONG_PTR atau DWORD_PTR. Kemudian gunakan atribut MIDL [call_as] untuk meletakkan pointer pada kawat sebagai nilai DWORD. Pembungkus sisi klien hanya perlu meneruskan argumen tersebut. Pembungkus sisi server menangani pemetaan di antara kedua jenis. Dengan cara yang sama, Anda dapat menggunakan atribut [transmit_as] atau atribut [represent_as] untuk mengonversi data Anda ke format yang kompatibel ke belakang dalam representasi kawat.
Jika kompatibilitas kawat mundur bukan masalah atau jika handel tidak digunakan untuk panggilan jarak jauh dan Anda yakin bahwa panggilan jarak jauh antara proses 32 dan 64-bit tidak akan pernah terjadi, Anda dapat menentukan ulang argumen sebagai ULONG64. Jika perlu, Anda dapat memodifikasi aplikasi 32-bit untuk meneruskan DWORD kepada pengguna. Atau, Anda dapat membangun stub terpisah dari file IDL yang terpisah untuk setiap platform menggunakan DWORD pada Windows 32-bit dan ULONG64 pada Windows 64-bit.