Поделиться через


атрибут 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; 
}

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

Файл конфигурации приложения (ACF)

Массивы

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

handle_t

Typedef

void