我知道有很多关于我的问题的帖子,我也读了这篇文章Delphi 11.2: CreateWindowEx fails thread on x64,但我不明白我到底应该做些什么来克服这个问题.我在Cromis工作.DirectoryMonitoring Cromis.Utils.pas https://github.com/CPsoftBE/BackupOfCromis,下面的代码CreateWindowEx()返回0只为 Delphi 11.2 /64位.
Result := CreateWindowEx(WS_EX_TOOLWINDOW, CTSHiddenWindowName, '', WS_POPUP,0, 0, 0, 0, 0, 0, HInstance, nil);
1条答案
按热度按时间wixjitnu1#
我在
Cromis.Utils.pas
中看到的一个问题是,TSClassWndProc()
的声明对于64位构建是错误的。它声明如下:Longint
是错误的类型。函数应该这样声明:WPARAM
、LPARAM
和LRESULT
的大小在32位和64位版本之间变化。使用错误的类型可能会导致 * 未定义的行为 *。顺便说一句,没有必要使用
{$IFDEF}
来基于构建目标有条件地调用(Get|Set)WindowLongPtr()
和(Get|Set)WindowLong()
。(Get|Set)WindowLongPtr()
在32位和64位构建中都可以工作,所以无条件地使用它们。