【发布时间】:2018-07-23 15:09:30
【问题描述】:
我正在尝试将新的 SystemParametersInfoForDPI 函数用于高 DPI 应用程序。但是,当我返回调用者时,我的应用程序立即崩溃(致命错误)。
尝试执行 00000000 时出现访问冲突。
我要获取的参数是 SPI_GETNONCLIENTMETRICS。
procedure TForm1.Button1Click(Sender: TObject);
var
SystemParametersInfoForDpi: function(uiAction, uiParam: UINT; pvParam: Pointer; fWinIni, DPI: UINT): BOOL; stdcall;
Metrics: TNonClientMetrics;
begin
SystemParametersInfoForDpi := GetProcAddress(GetModuleHandle(user32), 'SystemParametersInfoForDpi');
Win32Check(Assigned(SystemParametersInfoForDpi));
FillChar(Metrics, SizeOf(Metrics), 0);
Metrics.cbSize := SizeOf(Metrics);
if SystemParametersInfoForDPI(SPI_GETNONCLIENTMETRICS, Metrics.cbSize, @Metrics, 0, 120) then
Caption := 'OK'
else
Caption := 'FAIL';
end; // - crashes here; D2007; Win2016
怎么了?
【问题讨论】:
-
任何这样的问题都需要minimal reproducible example 这样我们才能看到你做错了什么
-
@DavidHeffernan 你没有抓住重点。这个问题只是说明 SystemParametersInfoForDPI 执行缓冲区溢出而不是设置 GetLastError 失败。
-
我们只有你的话。也许您的代码有问题。通过添加minimal reproducible example,我们可以轻松地验证这一点。这将使您的帖子大大改善。
-
“回答你自己的问题...”当然可以,但关键是问题,正如你自己所说,你还没有问过问题。
-
这里的规则有点不同。符合规则,一切都很好。
标签: windows delphi debugging highdpi