В C ++ я могу просто привести указатель на DWORD?
MyClass * thing;
DWORD myPtr = (DWORD)thing;
Будет ли это работать?
Вы, несомненно, Можно сделай это.
Будет ли это работать, будет зависеть от окружающей среды и от того, что вы хотите от нее сделать.
На 32-битной Windows1 (самое распространенное место, чтобы увидеть DWORD
) это будет нормально. На 64-битной Windows (где вы также видите DWORD
, но не так сильно) как правило, не будет.
В Windows довольно часто такие указатели передаются, например, в сообщениях Windows. LPARAM является typedef для LONG_PTR и довольно часто используется для передачи указателей на некоторые структуры. Вы должны использовать reinterpret_cast<DWORD_PTR>(thing)
для кастинга.
http://en.cppreference.com/w/cpp/language/explicit_cast
Прочитайте это, поймите это, избегайте бросков в стиле C, потому что они много скрывают.
Это может быть возможно, но не имеет смысла, например, DWORD равен 4 байта, а указатель (в наши дни) равен 8.
reinterpret_cast<DWORD&>(myPtr);
Должно работать, но оно может быть неопределенным или усеченным, если что-то будет работать, что будет!
КСТАТИ, reinterpret_cast
C ++ — это способ сказать «Доверяй мне, мой дорогой компилятор, я знаю, что я делаю» — он пытается интерпретировать биты (0 и 1) одной вещи как другую, независимо от того, какой смысл это имеет.
Законное использование, хотя это знаменитый взлом 1 / sqrt;)
Нет, в 64-битном процессе указатель является 64-битным, а DWORD — только 32-битным. Используйте DWORD_PTR.