【发布时间】:2015-11-22 21:17:12
【问题描述】:
有相当多的 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;
我发布这个问题和答案是为了帮助新手解决这些问题,而无需重新声明函数。我仍然记得一开始这对我来说是个问题。
【问题讨论】:
-
重新声明函数才是正确的解决方案
-
@David,谢谢;我尊重您作为德尔福经验丰富的老手的意见。不过,就个人而言,我不喜欢到处重新声明标准例程,而是尽可能地使用标准例程。但是,我将更新我的答案以表明标准做法似乎更喜欢重新声明。
-
应该有两个重载。一个带有 var,一个带有指向结构的指针。然后调用者可以选择。