В C++ можно ли просто указать указатель на DWORD?C++ Указатель как DWORD
MyClass * thing;
DWORD myPtr = (DWORD)thing;
Будет ли это работать?
В C++ можно ли просто указать указатель на DWORD?C++ Указатель как DWORD
MyClass * thing;
DWORD myPtr = (DWORD)thing;
Будет ли это работать?
Вы, несомненно, можете сделайте это.
Будет ли это работать, будет зависеть от среды и того, что вы хотите.
В 32-разрядной Windows (наиболее распространенное место, чтобы увидеть DWORD
), это нормально. На 64-битной Windows (где вы также видите DWORD
, но не так много), как правило, этого не произойдет.
Если процесс построен как 32-битный процесс, будет ли DWORD работать? –
Возможно, вы знаете ответ на этот вопрос - конфигурация по умолчанию для компилятора в Visual Studio (Win32) 32 бит? –
@ChristianStewart: Да. Вы можете создать 64-битный исполняемый файл, но он еще не установлен (по умолчанию). –
Нет, в 64-разрядном процессе указатель имеет 64 бита, но DWORD - всего 32 бита. Используйте DWORD_PTR.
Будет ли это не зависеть, если процесс 32 или 64 бит? –
Да, но 32-битный процесс на 64-битных окнах эквивалентен 32-битовому процессу на 32-битных окнах в этом случае. – user1937198
http://en.cppreference.com/w/cpp/language/explicit_cast
Читал, что, понять, что, во избежание C-стиле бросает, потому что они скрывают много.
Это может быть в состоянии сделать, но не имело бы никакого смысла, например, DWORD 4 байта и указатель (в эти дни) составляет 8.
reinterpret_cast<DWORD&>(myPtr);
Должно работать, но это может быть не определено или усечь, если что-то будет работать так!
BTW, reinterpret_cast
- это C + + способ сказать «Поверьте мне, мой дорогой компилятор, я знаю, что я делаю» - он пытается интерпретировать биты (0s и 1s) одной вещи как другой, независимо от того, насколько смысл, который делает.
Законное использование, хотя это известный 1/SQRT взломать;)
В окнах его довольно часто, чтобы передавать указатели таким образом, например, в окнах сообщений. LPARAM является typedef для LONG_PTR и довольно часто используется для передачи указателей на некоторые структуры. Вы должны использовать reinterpret_cast<DWORD_PTR>(thing)
для кастинга.
Нет, вы хотите 'uintptr_t'. – zwol
Ну, ваш код в порядке 32-битного процесса. Почему вы хотите ввести указатель в DWORD? –
@DavidHeffernan Я ищу указатель, который я скопировал с помощью 'ReadProcessMemory' из другого процесса. Мне нужно получить значение этого указателя, чтобы я мог читать данные из другого процесса, на который указывает этот указатель. –