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