问题如下:在 Windows x64 上,指针是 64 位的,但 long 类型是 32 位的。MSVC 似乎并不关心,甚至在默认警告级别上忽略了有关指针截断的警告。从最近开始,有一个针对 x86_64-w64-mingw32 或更好的原生 Windows x64 的 GCC。当指针被截断时,GCC 会产生错误(这是合乎逻辑的事情......),这在 WebKit 中造成了麻烦,更具体地说,在 Netscape 插件 API 中:首先,有文件(我只能发布一个超链接.. .):
http://trac.webkit.org/browser/trunk/WebCore/bridge/npapi.h
--> 将 uint32 定义为 32 位 int 类型(~第 145 行)
plugins/win/PluginViewWin.cpp -->将 Windows 窗口句柄转换为 32 位 int,截断它们(~第 450 行)
我建议的解决方法是将 uint32 强制转换更改为 uintptr_t,这让 GCC 很高兴,但仍将 64 位值放入 uint32(=unsigned long)中。我不知道如何解决这个问题,因为显然 WebKit 很乐意在 Win64 上截断指针......
我怎样才能以正确的方式解决这个问题?谢谢!