Несколько уровней указателей
При наличии нескольких уровней указателей атрибуты связываются с указателем, ближайшим к имени переменной. Клиент по-прежнему отвечает за выделение памяти, связанной с ответом.
Следующий пример позволяет заглушку вызывать сервер, не зная заранее, сколько данных будет возвращено:
[
uuid( ...),
version(3.3),
]
interface AnInterface
{
HRESULT GetBars([out] long * pSize,
[out, size_is( , *pSize)]
BAR ** ppBar);//BAR type defined elsewhere
}
В этом примере заглушка передает серверу уникальный указатель, который сервер инициализирует в значение NULL. Затем сервер выделяет блок BAR, задает указатель, задает аргумент size и возвращает значение . Обратите внимание, что для того, чтобы сервер повлиял на вызывающий объект, необходимо передать указатель [ref] на [уникальный] указатель на данные. Кроме того, обратите внимание на запятую в [size_is( , *pSize )], которая указывает, что указатель верхнего уровня не является указателем размера, а указателем нижнего уровня является .
На стороне клиента заглушка устанавливает для *ppBar значение NULL перед вызовом удаленной процедуры. Затем заглушка выделяет и отменяет выделение объектов BAR. Аргумент size указывает размер блока (и количество несмегалированных BAR). Клиент должен освободить возвращенный массив объектов BAR, если он больше не требуется.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по