如何通过一个零代替常量logging?

我正在尝试调用WIC(Windows图像组件)工厂方法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

那么我该如何通过它?

我如何通过一个nilconstlogging是必需的?

我尝试了一个天真的解决scheme:

 const NULL_GUID: TGUID = (); factory.CreateEncoder(GUID_ContainerFormatIco, NULL_GUID, {out}encoder); 

虽然这不会失败,但并不是真的遵循正确的规则。 它传递一个非NULL地址,指向API不知道的GUID。

我尝试了一个天真的解决scheme:

 factory.CreateEncoder(GUID_ContainerFormatIco, TGUID(nil), {out}encoder); 

但是这是一个无效的types转换

你可以使用这样的东西:

 const NULL_PGUID: PGUID = nil; begin factory.CreateEncoder(GUID_ContainerFormatIco, NULL_PGUID^, {out}encoder); end; 

或者像塞尔特克所说的那样,更短更甜美的版本:

 factory.CreateEncoder(GUID_ContainerFormatIco, PGUID(nil)^, {out}encoder); 

我做了一个测试,David的建议是:

 factory.CreateEncoder(GUID_ContainerFormatIco, TGUID(nil^), {out}encoder); 

也有效。