transmit_as - атрибут

Атрибут [transmit_as] указывает компилятору связать type-id*,* — представленный тип, которым управляет клиентское и серверное приложения, с передаваемым типом xmit-type.

typedef [transmit_as(xmit-type) [[ , type-attribute-list ]] ] type-specifier declarator-list; 

void __RPC_USER type-id_to_xmit (
  type-id __RPC_FAR *,
  xmit-type __RPC_FAR * __RPC_FAR *);
void __RPC_USER type-id_from_xmit (
  xmit-type __RPC_FAR *,
  type-id __RPC_FAR *);
void __RPC_USER type-id_free_inst (
  type-id __RPC_FAR *);
void __RPC_USER type-id_free_xmit (
  xmit-type__RPC_FAR *);

Параметры

xmit-type

Указывает тип данных, передаваемый между клиентом и сервером.

type-attribute-list

Указывает один или несколько атрибутов, применяемых к типу. Допустимые атрибуты типа: [handle], [switch_type]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [string] и [ignore]. Разделяйте несколько атрибутов запятыми.

type-specifier

Указывает базовый тип, структуру, объединение, тип перечисления или идентификатор типа. Необязательная спецификация хранилища может предшествовать описательу типа.

Declarator-list

Задает стандартные деклараторы C, такие как идентификаторы, деклараторы указателей и деклараторы массива. Дополнительные сведения см. в разделе Атрибуты массива и Sized-Pointer, массивы и массивы и указатели. Список деклараторов состоит из одного или нескольких деклараторов, разделенных запятыми. Декларатор параметров в деклараторе функции, например имя параметра, является необязательным.

type-id

Указывает имя типа данных, представляемого клиентским и серверным приложениям.

Комментарии

Чтобы использовать атрибут [transmit_as] , пользователь должен предоставить подпрограммы, преобразующие данные между представленными и передаваемыми типами; Эти подпрограммы также должны освобождать память, используемую для хранения преобразованных данных. Атрибут [transmit_as] указывает заглушкам вызывать предоставленные пользователем подпрограммы преобразования.

Передаваемый тип xmit-type должен разрешаться в базовый тип MIDL, предопределенный тип или идентификатор типа. Дополнительные сведения см. в разделе Базовые типы MIDL.

Пользователь должен предоставить следующие процедуры.

Имя подпрограммы Описание
type-id**_to_xmit** Преобразует данные из представленного типа в передаваемый тип. Эта подпрограмма выделяет память для передаваемого типа и любых данных, на которые ссылаются указатели в передаваемом типе.
type-id**_from_xmit** Преобразует данные из переданного типа в представленный тип. Эта подпрограмма отвечает за выделение памяти для данных, на которые ссылаются указатели в представленном типе. RPC выделяет память для самого типа.
type-id**_free_inst** Освобождает память, выделенную для данных, на которые ссылаются указатели в представленном типе. RPC освобождает память для самого типа.
type-id**_free_xmit** Освобождает хранилище, используемое вызывающим для передаваемого типа и данных, на которые ссылаются указатели в передаваемом типе.

 

 

Клиентская заглушка вызывает type-id**_to_xmit** для выделения пространства для передаваемого типа и преобразования данных в объекты типа xmit-type. Заглушка сервера выделяет место для исходного типа данных и вызывает type-id**_from_xmit** для преобразования данных из переданного типа в представленный тип.

При возвращении из кода приложения заглушка сервера вызывает type-id**_free_inst**, чтобы освободить хранилище для type-id на стороне сервера. Заглушка клиента вызывает type-id**_free_xmit** для отмены выделения хранилища xmit-type на стороне клиента.

Следующие типы не могут иметь атрибут [transmit_as] :

  • Дескриптора контекста (типы с атрибутом типа [context_handle] и типы, используемые в качестве параметров с атрибутом [context_handle] )
  • Типы, которые являются каналами или являются производными от каналов
  • Типы данных, используемые в качестве базового типа определения канала
  • Параметры, которые являются указателями или разрешаются в указатели
  • Параметры, которые являются соответствующими, изменяющимися или открытыми массивами
  • Структуры, содержащие соответствующие массивы
  • Предопределенный тип handle_t, void

Передаваемые типы должны соответствовать следующим ограничениям:

  • Они не должны быть указателями или содержать указатели.
  • Они не должны быть трубами или содержать трубы.

Примеры

typedef struct _TREE_NODE_TYPE 
{ 
    unsigned short data; 
    struct _TREE_NODE_TYPE * left; 
    struct _TREE_NODE_TYPE * right; 
} TREE_NODE_TYPE; 
 
typedef [transmit_as(TREE_XMIT_TYPE)] TREE_NODE_TYPE * TREE_TYPE; 
 
void __RPC_USER TREE_TYPE_to_xmit( 
    TREE_TYPE __RPC_FAR * , 
    TREE_XMIT_TYPE __RPC_FAR * __RPC_FAR *); 
 
void __RPC_USER TREE_TYPE_from_xmit ( 
    TREE_XMIT_TYPE __RPC_FAR *, 
    TREE_TYPE __RPC_FAR *); 
 
void __RPC_USER TREE_TYPE_free_inst( 
    TREE_TYPE __RPC_FAR *); 
 
void __RPC_USER TREE_TYPE_free_xmit( 
    TREE_XMIT_TYPE __RPC_FAR *);

См. также раздел

Массивы

Базовые типы MIDL

context_handle

Перечисления

Обрабатывать

handle_t

Файл определения интерфейса (IDL)

Игнорировать

Ptr

Ref

строка

Структура

switch_type

Typedef

union

Уникальный

void