delphi – 如何将nil传递给var参数?

前端之家收集整理的这篇文章主要介绍了delphi – 如何将nil传递给var参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有很多API例程将指向某个变量的指针作为转换为var参数的参数,但可以根据 Windows帮助文件指定为nil指针.

例如,ChangeDisplaySettings函数声明为:

function ChangeDisplaySettings(var lpDevMode: TDeviceMode; dwFlags: DWORD): Longint; stdcall;

但Windows帮助文件明确指出“在动态模式更改后,为lpDevMode参数传递NULL是返回默认模式的最简单方法.”正确的翻译应该是:

function ChangeDisplaySettings(lpDevMode: PDeviceMode; dwFlags: DWORD): Longint; stdcall;

我发布这个问题和答案,以帮助新手解决这些问题,而无需重新声明功能.我还记得在开始时这对我来说是一个问题.

解决方法

一种解决方案是使用指针代替var参数重新声明任何此类函数,但有一个更简单的解决方案.只需将解除引用的nil指针强制转换为正确的类型,例如,对于ChangeDisplaySettings示例,使用以下命令将显示模式重置为默认注册表设置:
ChangeDisplaySettings(TDeviceMode(nil^),0);

要么

ChangeDisplaySettings(PDeviceMode(nil)^,0);

这样你传递一个恰好位于内存地址为零的var参数 – 编译器很高兴你可以将一个nil指针传递给API例程!

编辑:从David Hefferman的评论来看,似乎标准的做法是重新声明这样的例程.就个人而言,我更喜欢使用标准声明,如果我可以在我自己的个人单位,但出于专业工作的目的,我建议开发人员遵循标准做法.

猜你在找的Delphi相关文章