在我的Delphi应用程序中(在动态加载SetProcessDpiAwareness XE7之后),我首先要添加一个对XE7窗口函数的调用。我知道最好使用清单来设置DPIAware值,而且我已经将其分开工作,并最终将使用它。但是,在开发期间,我希望使用命令行参数来设置DPIAwareness值,否则我必须重新构建应用程序来更改此状态。
问题是SetProcessDpiAwareness返回错误代码$800700A0。这在函数描述中没有记录,代码意味着什么?
啊,我找到了,由于参数的答案,我声明函数类型是错误的,我有:
TSetDPIFunc =函数(const PROCESS_DPI_AWARENESS):HRESULT;
但是PROCESS_DPI_AWARENESS并没有被定义为枚举。更改为以下内容,现在工作正常:
TSetDPIFunc =函数(const x:整型):HRESULT;
发布于 2016-05-11 17:02:07
0x8007XXXX是一个使用HRESULT_FROM_WIN32()的HRESULT。WIN32_FROM_HRESULT(0x800700A0)给出了0xA0,即错误代码160,即ERROR_BAD_ARGUMENTS (“一个或多个输入参数不正确”)。
对我来说,得到这个错误是没有意义的,因为这个函数甚至不带任何参数!
因此,我唯一能想到的是,它与the issue described here有关,假设您自己更改了DPI设置以进行测试,结果失败了:
因此,为了使SetProcessDPIAware (以及相关的方法: SetProcessDpiAwareness()和使用true的清单)正确工作,必须在更改DPI设置和运行程序之前再次注销和登录。
顺便说一句,如果这是有用的:为了测试清单而不需要完全重新构建,您可以使用mt.exe从命令行向应用程序附加清单。
https://stackoverflow.com/questions/37168444
复制相似问题