Метод IPerPropertyBrowsing::GetPredefinedStrings (ocidl.h)
Извлекает строки описания массива для допустимых значений, которые может принимать указанное свойство.
Синтаксис
HRESULT GetPredefinedStrings(
[in] DISPID dispID,
[out] CALPOLESTR *pCaStringsOut,
[out] CADWORD *pCaCookiesOut
);
Параметры
[in] dispID
Идентификатор диспетчеризации свойства.
[out] pCaStringsOut
Указатель на структуру массива, выделенного вызывающим объектом, которая содержит число элементов и адрес выделенного методом массива строковых указателей. Этот метод также выделяет память для строковых значений, содержащих предопределенные имена, и сохраняет строковые указатели в массиве. Если метод завершается сбоем, память не выделяется, а содержимое структуры не определено.
[out] pCaCookiesOut
Указатель на структуру массива, выделенного вызывающим объектом, которая содержит число элементов и адрес выделенного методом массива значений DWORD . Значения в массиве можно передать в IPerPropertyBrowsing::GetPredefinedValue , чтобы получить значение, связанное с именем в той же позиции массива внутри pCaStringsOut. Если метод завершается сбоем, память не выделяется, а содержимое структуры не определено.
Возвращаемое значение
Этот метод может возвращать стандартные возвращаемые значения E_INVALIDARG, E_OUTOFMEMORY и E_UNEXPECTED, а также следующие значения.
Код возврата | Описание |
---|---|
|
Метод завершился успешно. |
|
Этот метод не реализован, и предопределенные имена не поддерживаются. |
|
Недопустимый адрес в pCaStringsOut или pCaCookiesOut . Например, любой из параметров может иметь значение NULL. |
Комментарии
Каждая строка, возвращаемая в массиве, на который указывает pCaStringsOut , имеет соответствующий маркер в подсчитываемом массиве, на который указывает pCaCookiesOut, где маркер можно передать в IPerPropertyBrowsing::GetPredefinedValue , чтобы получить фактическое значение ( VARIANT), соответствующее строке.
Используя предопределенные строки, вызывающий объект может получить список строк для заполнения элементов пользовательского интерфейса, например раскрывающегося списка. Когда пользователь выбирает одну из этих строк в качестве значения для назначения свойству, вызывающий объект может получить соответствующее значение с помощью IPerPropertyBrowsing::GetPredefinedValue.
Примечания к вызывающим абонентам
Структуры CALPOLESTR и CADWORD , передаваемые этому методу, выделяются вызывающим объектом. Вызывающий объект отвечает за освобождение каждой строки, на которую указывает массив CALPOLESTR , а также из структуры CALPOLESTR .Вся память выделяется с помощью CoTaskMemAlloc. Вызывающий объект отвечает за освобождение строк и массива с помощью CoTaskMemFree.
При возвращении из этого метода вызывающий объект отвечает за всю эту память и должен освободить ее, когда она больше не нужна. Код для этого выглядит следующим образом.
CALPOLESTR castr;
CWDWORD cadw;
ULONG i;
pIPerPropertyBrowsing->GetPredefinedStrings(dispID, &castr, &cadw);
//...Use the strings and the cookies
CoTaskMemFree((void *)cadw.pElems);
for (i=0; i < castr.cElems; i++)
CoTaskMemFree((void *)castr.pElems[i]);
CoTaskMemFree((void *)castr.pElems);
Примечания для разработчиков
Поддержка предопределенных имен и значений не требуется. Если объект не поддерживает эти имена, верните E_NOTIMPL из этого метода. Если этот метод не реализован, IPerPropertyBrowsing::GetPredefinedValue также не должен быть реализован.Этот метод заполняет элементы cElems и pElems структур CADWORD и CALPOLESTR . Он выделяет массивы, на которые указывают эти структуры, с помощью CoTaskMemAlloc и заполняет эти массивы. В случае CALPOLESTR этот метод также выделяет каждую строку с CoTaskMemAlloc, сохраняя каждый указатель строки в массиве.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | ocidl.h |