Указатели ссылок

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

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

data changing at a static reference pointer address

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

  • Он всегда указывает на допустимое хранилище и никогда не имеет значения 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 заполняет данными.