我有一个旧的Windows应用程序,在Visual C ++ 6.0中编译,我需要在x64平台上工作。该应用程序实际上似乎没问题,因为我使用了非常谨慎的数据类型,但它与Outlook加载项交互,我必须重新编译为x64 dll才能将其加载到Outlook 64位版本中。
加载项使用WM_COPYDATA消息将数据发送到主应用程序,发送的数据是结构如下:
{
DWORD dwData1;
char pszData2[32];
DWORD dwData3;
}
事情没有用,所以我做了一些调试,结果发现当64位加载项将数据发送到32位程序时,DWORD以64位(8字节)的形式进入,因为程序需要32位DWORD(4个字节),所以完全抛出结构。查看内存中的数据,我可以看到每个DWORDS的额外4个字节,在32字节字符串之前和之后。
现在在Stack Overflow和其他地方做一些研究。我认为,即使在x64平台上,作为微软的选择,DWORD仍然保留了32位长度。在64位域中执行TRACE(sizeof(DWORD)),我得到4个字节。
那么是什么原因导致我的64位加载项在每个DWORD中发送64位?
我通过将结构定义更改为使用DWORD32解决了这个问题,但我想“获取”基本概念,以便知道这可能会对我的代码产生什么影响。