Как правильно передать nil в функцию CreateEncoder из WIC в Delphi
При работе с Windows Imaging Component (WIC) в среде разработки Delphi, иногда возникает необходимость передать в функцию nil в качестве параметра, когда нет предпочтений по кодеку. В документации WIC функция CreateEncoder описывается следующим образом:
Параметр pguidVendor является необязательным и предназначен для указания предпочтительного поставщика кодека. В случае, если предпочтений нет, необходимо передать nil.
В Delphi, перевод функции CreateEncoder выглядит так:
function CreateEncoder(const guidContainerFormat: TGuid; const pguidVendor: TGUID;
out ppIEncoder: IWICBitmapEncoder): HRESULT; stdcall;
Параметр pguidVendor объявлен как const TGUID, что может вызвать затруднения при попытке передать nil.
Попытка простого определения NULL_GUID как пустого массива:
const
NULL_GUID: TGUID = (); // Неправильно, так как это не `nil`
factory.CreateEncoder(GUID_ContainerFormatIco, NULL_GUID, {out}encoder);
Не является корректным решением, так как передаётся не nil, а адрес, указывающий на неизвестный API объект.
Альтернативный подход, попытка привести nil к типу TGUID, также не удаётся:
factory.CreateEncoder(GUID_ContainerFormatIco, TGUID(nil), {out}encoder); // Невалидное преобразование типов
Подтвержденный ответ заключается в использовании указателя на TGUID. Можно определить константу NULL_PGUID как nil и передать в функцию:
const
NULL_PGUID: PGUID = nil;
begin
factory.CreateEncoder(GUID_ContainerFormatIco, NULL_PGUID^, {out}encoder);
end;
Также возможно использование более краткой записи, предложенной Sertac:
Таким образом, правильно передать nil в функцию CreateEncoder можно, используя указатель на TGUID, инициализированный значением nil. Это позволит корректно указать, что предпочтений по кодеку нет.
Контекст вопроса заключается в том, как корректно передать значение `nil` в качестве параметра функции `CreateEncoder` из библиотеки Windows Imaging Component (WIC) при работе в среде разработки Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.