我正在将代码从 32 位 vs2012 迁移到 64 位 vs2015。
我在程序中遇到了以下函数调用:
CryptHashData(hHash,
(BYTE*)AUTH_ENCRYPTION_KEY,
wcslen(AUTH_ENCRYPTION_KEY) * sizeof(wchar_t),
0u))
其声明位于wincrypt.h
位于c:\Program Files (x86)\Windows Kits\8.0\Include\um\wincrypt.h
(看起来没有被编辑)。
声明是:
WINADVAPI
BOOL
WINAPI
CryptHashData(
_In_ HCRYPTHASH hHash,
_In_reads_bytes_(dwDataLen) CONST BYTE *pbData,
_In_ DWORD dwDataLen,
_In_ DWORD dwFlags
);
DWORD dwFlags:这里的问题是0u
是 unsigned int 并且该函数需要一个DWORD
.
为了解决这个错误,我做了:
-
c-style
铸造为(DWORD)(0U)
在功能上call(tried size_t, unsigned int)
static_cast
- 尝试创建一个新变量并将其强制转换
但警告仍然存在
看来我必须改变函数调用
有人可以建议我如何解决这个问题。
请询问是否需要更多详细信息。
警告图像详细信息 https://i.stack.imgur.com/IfADP.png
稍后警告图像详细信息 https://imgur.com/a/Y0qzl
您认为 0u 是问题所在。
对我来说,问题似乎应该出在第三个参数上,其中 size_t 值用于提供双字参数。
正如SomeProgrammerDude所解释的,在新环境中size_t可能是64位,而DWORD是32位。这解释了新平台上的不匹配。
在 32 位平台上,您没有收到警告(我假设),可能是因为 size_t 在那里是 32 位,没有丢失信息的风险。
您报告说强制转换避免了警告,这表明0u
不是问题。
事实上,该警告似乎与0u
可能是由于编译器抱怨整个函数调用并指出它的结尾,即结束)
,它恰好与0u
.
全部移动的实验)
分隔线(结果可见,因为两个屏幕截图之间的差异)已经证实了这一点。
请注意,强制转换只是避免了警告,这与解决问题不同。
(您明智地询问了铸造的安全性,我建议在一个单独的问题中这样做。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)