Здравствуйте, Testus, Вы писали:
T>Слева нельзя приводить типы.
Очень похоже. Если тип данных указать не void* а сразу LPBYTE, то всё работает.
Дело в том что код принесён в VS из Билдера, где отлично работал
Здравствуйте, Testus, Вы писали:
T>Слева нельзя приводить типы.
Ограниченно можно. В данном случае мы имеем реинтерпретацию переменной "указатель на void" как "указатель на BYTE" — на большинстве платформ форматы указателей совпадают, так что проблем нет.
reinterpret_cast<BYTE*&>(ptr) += 25;
А вообще, если заранее известно, что с ptr работают как с указателем на массив байтов — то зачем создавать себе сложности, сперва объявляя его как LPVOID, а потом приводя к LPBYTE.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Кодт, Вы писали:
К>Ограниченно можно. В данном случае мы имеем реинтерпретацию переменной "указатель на void" как "указатель на BYTE" — на большинстве платформ форматы указателей совпадают, так что проблем нет.
К>К>reinterpret_cast<BYTE*&>(ptr) += 25;
К>
проблема в том, что использование reinterpret_cast может привести к дополнительным ошибкам.
К>А вообще, если заранее известно, что с ptr работают как с указателем на массив байтов — то зачем создавать себе сложности, сперва объявляя его как LPVOID, а потом приводя к LPBYTE.
Скорее всего автор хотел получить массив неопределённого типа
Здравствуйте, Ronaldo, Вы писали:
R>Почему не работает следующий код
R>ptr — указатель типа void.
R>вот так не работает
R>((LPBYTE)ptr) += 25;
R>error C2106: '+=' : left operand must be l-value
Ну, явно потому, что ((LPBYTE)ptr) не l-value.
Т.е. нельзя написать:
((LPBYTE)ptr) = ...