我正在維護一些代碼,並且在升級到較新的編譯器Visual Studio 2015後,我得到一個編譯器警告,其中FT_HANDLE被轉換爲LPLONG。如何安全地從FT_HANDLE轉換爲LPLONG-64位編譯
執行此轉換並刪除警告的安全方法是什麼?
#include <Windows.h>
#include <iostream>
typedef PVOID FT_HANDLE;
void convert(FT_HANDLE ftHandle, LPLONG pPortNumber) {
*pPortNumber = reinterpret_cast<long>(ftHandle) & 0xFF; // problem here
}
int main() {
FT_HANDLE handle = malloc(10); // simulate a real handle
LONG portNumber(0);
convert(handle, &portNumber);
std::cout << "result=" << &portNumber << '\n';
free(handle);
}
編譯器警告:
warning C4311: 'reinterpret_cast': pointer truncation from 'FT_HANDLE' to 'long'
warning C4302: 'reinterpret_cast': truncation from 'FT_HANDLE' to 'long'
而這個警告是......究竟是什麼? –
地址的低8位如何對應任何東西? – 1201ProgramAlarm
What @ 1201ProgramAlarm的意思是說'FT_HANDLE'是_pointer_。據推測,你想要在該地址施放該值,而不是地址本身。嘗試'reinterpret_cast(* ftHandle)'。 –