Ссылочные указатели

Ссылочные указатели являются самыми простыми указателями и требуют наименьшего объема обработки клиентской заглушки. Когда клиентская программа передает указатель на удаленную процедуру, указатель на ссылку всегда содержит адрес допустимого блока памяти. После завершения удаленной процедуры он по-прежнему будет указывать на тот же блок памяти. Эти указатели в основном используются для реализации семантики ссылок и для разрешения параметров [out] в C.

В следующем примере значение указателя не изменяется во время вызова, хотя содержимое данных по адресу, указанному указателем, может измениться.

изменение данных по адресу статического ссылочного указателя

Указатель на ссылку имеет следующие характеристики:

  • Он всегда указывает на допустимое хранилище и никогда не имеет значения NULL.
  • Он никогда не изменяется во время вызова и всегда указывает на одно и то же хранилище до и после вызова.
  • Данные, возвращаемые удаленной процедурой, записываются в существующее хранилище.
  • К хранилищу, на которое указывает указатель ссылки, нельзя получить доступ с помощью любого другого указателя или любого другого имени в функции.

Используйте атрибут [ref] для указания ссылочных указателей в определениях интерфейсов, как показано в следующем примере.

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0)
]
interface RefPtrInterface
{
  void RemoteFn([in, out, ref] char *pChar);
}

В этом примере параметр pChar определяется как указатель на один символ, а не массив символов. Это параметр [out] и указатель ссылки, указывающий на память, которую подпрограмма сервера RemoteFn будет заполнять данными.