gro*_*rtn 3 c++ porting 32bit-64bit
所以我试图将32位移植到64位.
我已经打开了VS2008标志来检测64位的问题.
我正在努力追随:
char * pList = (char *)uiTmp);
Run Code Online (Sandbox Code Playgroud)
警告C4312:'type cast':从'unsigned int'转换为更大尺寸的'char*'
忽略代码本身.对于任何指针也是如此,因为64位指针大于32位无符号int或int用于此目的.
鉴于您必须将较小的类型转换为更大的类型,您将如何在两个32/64位系统上正确执行此操作
这不是一个你可以忽略的警告,它将以64位代码炸弹.unsigned int无法存储指针.没有魔法演员可以使这项工作.
检查代码并重新考虑将指针值存储在unsigned int中.它可能应该是一个空白*.如果你#include <windows.h>那么你可以使用UINT_PTR.
我有同样的问题。在我的例子中,代码试图使用 rand() 生成一个随机句柄,它返回一个 32 位值。(为什么它需要一个随机句柄值?不要问...)
我发现可以安抚编译器的方法如下:
char * pList = (char *)(0) + uiTmp;
Run Code Online (Sandbox Code Playgroud)
如果您的系统使用 32 位或 64 位指针,这应该可以正常工作。当然,您可能不想在 64 位平台上使用 32 位整数,具体取决于您的代码到底在做什么。