我正在尝试调用WIC(Windows Imaging Component)工厂方法CreateEncoder
:
HRESULT CreateEncoder(
[in] REFGUID guidContainerFormat,
[in, optional] const GUID *pguidVendor,
[out, retval] IWICBitmapEncoder **ppIEncoder
);
一般的想法是:
var
encoder: IWICBitmapEncoder;
CreateEncoder(
GUID_ContainerFormatIco, //The GUID for the desired container format
nil, //No preferred codec vendor
{out}encoder);
对于第二个参数,我希望传递nil
来表示我没有编码器偏好。
但是Delphi对WinCodec.pas的翻译如下:
function CreateEncoder(const guidContainerFormat: TGuid; const pguidVendor: TGUID;
out ppIEncoder: IWICBitmapEncoder): HRESULT; stdcall;
您会注意到第二个参数,即可选的TGUID
,声明为const
。
那么我该如何将其设置为nil?
在需要const
记录的位置传递nil
应该怎么做?
我尝试了天真的解决方案:
const
NULL_GUID: TGUID = ();
factory.CreateEncoder(GUID_ContainerFormatIco, NULL_GUID, {out}encoder);
当发生这种情况时,它并没有真正遵循正确的规则。它传递了一个非空地址,该地址指向API不知道的GUID。
我尝试了天真的解决方案:
factory.CreateEncoder(GUID_ContainerFormatIco, TGUID(nil), {out}encoder);
但这是一个无效的类型转换。
TGUID(nil^)
也可能起作用。 - David Heffernan