私はいくつかのコードを維持しています。新しいコンパイラ、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
@ 1201ProgramAlarmとは、 'FT_HANDLE'は_pointer_です。おそらく、アドレス自体ではなく、そのアドレスに値をキャストしたいと考えています。 'reinterpret_cast(* ftHandle)'を試してください。 –