Nic*_*haw 7 c winapi visual-studio-2012
我正在改变我们的代码库,使其在64位架构下进行编译.我必须做出的大部分改变是显而易见的,但这一次让我感到难过. SetWindowPos具有第二个参数,hWndInsertAfter即可以是一个窗口句柄,或预定义的值中的一个HWND_TOP,HWND_BOTTOM,HWND_TOPMOST和HWND_NOTOPMOST(见此处为MSDN信息).这些值在中定义WinUser.h.
在32位架构中,使用其中一个调用SetWindowPos工作正常,但在64位,编译器抱怨:
警告C4306:'type cast':从'int'转换为更大尺寸的'HWND'
这是因为#defines正在将[32位]整数转换为HWND,例如:
#define HWND_TOPMOST ((HWND)-1)
在没有编译器发出警告的情况下,我需要更改以在64位架构中进行编译?我可以使用#pragma warning( disable: 4306 )#define中的64位int 来禁用警告或使用我自己的定义,但是肯定有一种"正确"的Microsoft方法吗?
好吧,经过多次测试,问题是我的文件是 .c 文件。我将其重命名为 .cpp 和 SetWindowPos,然后编译时没有错误(相反,在我创建的新测试应用程序中尝试“基本”解决方案,当我将默认 .cpp 文件重命名为 .c 文件时,它开始抱怨) 。
看起来 .c 文件不希望能够将 32 位int值转换为 64 位指针。这是有道理的,但没有解释为什么它在 .cpp 文件中起作用。如果有人对为什么会这样有任何想法,请在评论中注明......