我正在尝试将新的 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
怎么了?