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]. Разделите несколько атрибутов запятыми.

описатель типа

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

declarator-list

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

type-id

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

Remarks

Чтобы использовать атрибут [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** Освобождает хранилище, используемое вызывающим для передаваемого типа и для данных, на которые ссылаются указатели в передаваемом типе.

 

 

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

При возвращении из кода приложения заглушка сервера вызывает тип-id**_free_inst** для освобождения хранилища для идентификатора типа на стороне сервера. Заглушка клиента вызывает тип-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

Союза

Уникальный

void