我正在將代碼從32位vs2012遷移到64位vs2015。警告C4267'參數':從'size_t'轉換爲'DWORD',可能會丟失數據
我遇到了我的程序如下函數調用:
CryptHashData(hHash,
(BYTE*)AUTH_ENCRYPTION_KEY,
wcslen(AUTH_ENCRYPTION_KEY) * sizeof(wchar_t),
0u))
其聲明是在位於c:\Program Files (x86)\Windows Kits\8.0\Include\um\wincrypt.h
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
- 嘗試創建一個新的變量和鑄造它
但警告仍然存在
看起來我必須改變函數調用
有人可以建議我如何解決這個問題。
請詢問是否需要更多細節。
Warning image details
later Warning image details
你正在考慮'0u'是問題。對我來說,看起來問題應該圍繞第三個參數,其中size_t值用於提供雙字參數。 – Yunnosch
問題不在於'0u'表達式,而是['std :: wcslen'](http://en.cppreference.com/w/cpp/string/wide/wcslen)和['sizeof '](http://en.cppreference.com/w/cpp/language/sizeof)運算符返回'size_t'。這可能是64位類型,而「DWORD」是32位類型。 –