атрибут represent_as
Атрибут ACF [represent_as] связывает именованный локальный тип в целевом языке repr-type с именованным типом передачи, передаваемым между клиентом и сервером.
typedef [represent_as(repr-type) [[ , type-attribute-list ]] ] named-type;
void __RPC_USER named-type_from_local (
repr-type __RPC_FAR * ,
named-type __RPC_FAR * __RPC_FAR * );
void __RPC_USER named-type_to_local (
named-type __RPC_FAR * ,
repr-type __RPC_FAR * ); void __RPC_USER named-type _free_inst ( named-type __RPC_FAR * ); void __RPC_USER named-type _free_local ( repr-type __RPC_FAR * );
Параметры
-
именованный тип
-
Указывает именованный тип данных передачи, передаваемый между клиентом и сервером.
-
type-attribute-list
-
Указывает один или несколько атрибутов, применяемых к типу. Разделите несколько атрибутов запятыми.
-
repr-type
-
Указывает представленный локальный тип на целевом языке, который представлен клиентским и серверным приложениям.
Remarks
При использовании [represent_as], необходимо предоставить подпрограммы, которые преобразовываются между локальными и типами передачи, а также свободная память, используемая для хранения преобразованных данных. Атрибут [represent_as] указывает заглушкам вызывать процедуры преобразования, предоставляемые пользователем.
Переданный именованный тип должен разрешаться в базовый тип MIDL, предопределенный тип или идентификатор типа. Дополнительные сведения см. в разделе "Базовые типы MIDL".
Необходимо указать следующие подпрограммы:
Имя подпрограммы | Описание: |
---|---|
named_type**_from_local** | Преобразует данные из локального типа в тип сети. Подпрограмма выделяет память для сетевого типа данных, включая память для любых данных, на которые ссылаются указатели в типе сетевых данных. |
named_type**_to_local** | Преобразует данные из сетевого типа в локальный тип. Подпрограмма отвечает за выделение памяти для данных, на которые ссылаются указатели в локальном типе. RPC выделяет память для самого локального типа. |
named_type**_free_local** | Освобождает память, выделенную для данных, на которые ссылаются указатели в локальном типе. RPC освобождает память для самого типа |
named_type**_free_inst** | Освобождает память, выделенную для данных, на которые ссылаются указатели в сетевом типе и для самого типа сети. |
Заглушка клиента вызывает именованный тип**_from_local** для выделения пространства для передаваемого типа и преобразования данных из локального типа в тип сети. Заглушка сервера выделяет место для исходного типа данных и вызывает именованный тип**_to_local** для преобразования данных из сетевого типа в локальный тип.
При возвращении из кода приложения клиент и серверные заглушки вызывают именованный тип**_free_inst** для освобождения хранилища для типа сети. Заглушка клиента вызывает именованный тип**_free_local** для освобождения хранилища, возвращаемого подпрограммой.
У следующих типов не может быть атрибут [represent_as] :
- Соответствие, различные или соответствующие массивы
- Структуры, в которых последний элемент является соответствующим массивом (соответствующая структура)
- Указатели или типы, содержащие указатель
- Каналы или типы, содержащие каналы
- Типы, используемые в качестве базового типа для канала
- Предопределенные типы handle_t, void
- Типы с атрибутом [handle]
Примеры
//these data types defined in .IDL or elsewhere
typedef struct _lbox
{
long data;
struct _lbox *next;
} lbox;
typedef [ref] lbox *PBOX_LOC;
typedef long LONG4[4];
//in .ACF file :
interface iface
{
typedef [ represent_as(PBOX_LOC) ] LONG4;
}
См. также раздел