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


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

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

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

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

Ссылочный указатель имеет следующие характеристики:

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

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

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

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