Bagikan melalui


Deskriptor Parameter

Seperti disebutkan sebelumnya, Oi dan deskriptor parameter gaya –Oif ada.

Deskriptor Parameter –Oi

Stub yang ditafsirkan sepenuhnya memerlukan informasi tambahan untuk setiap parameter dalam panggilan RPC. Deskripsi parameter prosedur mengikuti segera setelah deskripsi prosedur.

Simple – Oi

Deskriptor Parameter

Format untuk deskripsi [dalam] atau mengembalikan parameter jenis sederhana adalah:

FC_IN_PARAM_BASETYPE 
simple_type<1>

–atau–

FC_RETURN_PARAM_BASETYPE 
simple_type<1>

Di mana simple_type<1> adalah token FC yang menunjukkan jenis sederhana. Kodenya adalah sebagai berikut:

4e  FC_IN_PARAM_BASETYPE 
53  FC_RETURN_PARAM_BASETYPE

-Oi Lainnya

Deskriptor Parameter

Format untuk deskripsi untuk semua jenis parameter lainnya adalah:

param_direction<1> 
stack_size<1> 
type_offset<2>

Di mana bidang param_direction<1> untuk setiap deskripsi ini harus salah satu yang diperlihatkan dalam tabel berikut.

Hex Bendera Arti
4d FC_IN_PARAM Dalam parameter.
50 FC_IN_OUT_PARAM Parameter masuk/keluar.
51 FC_OUT_PARAM Parameter keluar.
52 FC_RETURN_PARAM Prosedur mengembalikan nilai.
4f FC_IN_PARAM_NO_FREE_INST Dalam xmit/rep sebagai parameter yang tidak dibuat bebas.

 

stack_size<1> adalah ukuran parameter pada tumpukan, yang dinyatakan sebagai jumlah bilangan bulat yang ditempati parameter pada tumpukan.

Nota

Mode–Oi tidak didukung pada platform 64-bit.

 

Bidang type_offset<2> adalah offset dalam tabel string format jenis, menunjukkan deskriptor jenis untuk argumen.

Deskriptor Parameter –Oif

Ada dua format yang mungkin untuk deskripsi parameter, satu untuk jenis dasar, yang lain untuk semua jenis lainnya.

Jenis dasar:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_format_char<1> 
unused<1>

Lain:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_offset<2>

Dalam> stack_offset<2 menunjukkan offset pada tumpukan argumen virtual, dalam byte. Untuk jenis dasar, jenis argumen diberikan langsung oleh karakter format yang sesuai dengan jenis. Untuk jenis lain, bidang type_offset<2> memberikan offset dalam tabel string format jenis tempat deskriptor jenis untuk argumen berada.

Bidang atribut parameter didefinisikan sebagai berikut:

typedef struct
  {
  unsigned short  MustSize            : 1;    // 0x0001
  unsigned short  MustFree            : 1;    // 0x0002
  unsigned short  IsPipe              : 1;    // 0x0004
  unsigned short  IsIn                : 1;    // 0x0008
  unsigned short  IsOut               : 1;    // 0x0010
  unsigned short  IsReturn            : 1;    // 0x0020
  unsigned short  IsBasetype          : 1;    // 0x0040
  unsigned short  IsByValue           : 1;    // 0x0080
  unsigned short  IsSimpleRef         : 1;    // 0x0100
  unsigned short  IsDontCallFreeInst  : 1;    // 0x0200
  unsigned short  SaveForAsyncFinish  : 1;    // 0x0400
  unsigned short  Unused              : 2;
  unsigned short  ServerAllocSize     : 3;    // 0xe000
  } PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
  • MustSize bit diatur hanya jika parameter harus berukuran.
  • Bit MustFree diatur jika server harus memanggil rutinitas NdrFree* parameter.
  • Bit IsSimpleRef diatur untuk parameter yang merupakan penunjuk referensi ke apa pun selain pointer lain, dan yang tidak memiliki atribut alokasi. Untuk jenis seperti itu, bidang type_offset<> deskripsi parameter, kecuali untuk penunjuk referensi ke jenis dasar, menyediakan offset ke jenis referensi; penunjuk referensi hanya dilewati.
  • Bit IsDontCallFreeInst diatur untuk parameter represent_as tertentu yang rutinitas instans gratisnya tidak boleh dipanggil.
  • Bit ServerAllocSize bukan nol jika parameternya adalah [keluar], [di], atau [masuk,] pointer ke pointer, atau pointer ke enum16, dan akan diinisialisasi pada tumpukan interpreter server, daripada menggunakan panggilan ke I_RpcAllocate. Jika bukan nol, nilai ini dikalikan dengan 8 untuk mendapatkan jumlah byte untuk parameter . Perhatikan bahwa melakukannya berarti setidaknya 8 byte selalu dialokasikan untuk pointer.
  • Bit IsBasetype diatur untuk jenis sederhana yang sedang dinaungi oleh perulangan penerjemah -Oif utama. Secara khusus, jenis sederhana dengan atribut rentang di atasnya tidak ditandai sebagai jenis dasar untuk memaksa rentang marshaling rutin melalui pengiriman menggunakan token FC_RANGE.
  • Bit IsByValue diatur untuk jenis gabungan yang dikirim oleh nilai, tetapi tidak diatur untuk jenis sederhana, terlepas dari apakah argumen adalah penunjuk. Jenis senyawa yang ditetapkan adalah struktur, serikat, transmit_as, represent_as, wire_marshal dan SAFEARRAY. Secara umum, bit diperkenalkan untuk keuntungan perulangan penerjemah utama dalam penerjemah-Oicf, untuk memastikan argumen nonsimple (disebut sebagai argumen jenis majemuk) didereferensikan dengan benar. Bit ini tidak pernah digunakan dalam versi penerjemah sebelumnya.