| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Ссылка/Указатель нужно значение из LPARAM |
| Автор: SolRus 29.2.2012, 06:03 | ||||
Подскажите, как в функции ProcessList получить значение hWnd чтоб изменить?
как писать lParam чтоб значение было? понимаю что можно так :EnumWindows(ProcessList, (LPARAM) hWnd); но тогда значение hWnd не изменится :( что-то так доконца с этими ссылками/указателями недоразбирался :( (если что faq читал) =================== и вопрос № 2, не совсем в тему:
|
| Автор: Dem_max 29.2.2012, 06:46 | ||
|
| Автор: SolRus 29.2.2012, 16:45 | ||||||||||
точно
это с++ почему нельзя ссылаться на случайный адрес в памяти? или это просто запрет с++ и в с так можно?
из твоей записи показывается что k создается и имеет адрес в памяти, однако если cout << (long) k; выводит 0 , т.е. адрес указателя 0 ? создал второй такой же указатель и у него адрес тоже 0 они создаются?
Нарушение прав доступа при записи "0x00000000". я правильно понял - что этим я пытаюсь перезапись свой код [CS] в памяти? (или сегмент кода начинается не с 0?) отчего кстати можно указывать на нулевой адрес, а на 0x00000001 уже нельзя? |
| Автор: feodorv 29.2.2012, 17:43 | ||||||
Ой, да нет здесь ничего сложного))) Один раз понять, и всё))) Можно!
В C++ - через type cast. А что же ещё должно было вывеститься?)))) Что значит "k имеет адрес в памяти"? Ээээ, нет. Значение(!) указателя 0!!! Вот представь себе большуший непрерывный набор байт размером, скажем, 4 гига. Каждый байт в этом наборе имеет номер: 0-й байт, 1-й байт .... Этот номер и будет являтся адресом байта. И если написать то это значит для компилятора, что k является номером байта, в данном случае номер байта ноль (по счёту). При этом сама переменная k занимает какое-то пространство в памяти процесса (то есть занимает какие-то 4 байта из диапазона 0-4G), но значением её будет 0. Именно поэтому (long) k даст 0. А вот если захочется понять, какие именно байты в памяти процесса отведены под переменную k, то нужно посмотреть на адрес этой переменной: (long) &k. А вот здесь не задаётся никакой адрес!!!))) В C такой конструкции нет, это C++. Конструкция означает, что переменная k задана по ссылке, и значение переменной есть 0x01010101. На вид никакого адреса, но он всё же невидимо присутствует (и задать его нельзя). Это особый разговор))) Некоторые области памяти процесса (специально!) защищены от чтения или записи.
Нет))) Всего лишь попытка поместить целочисленное 5 в первые 4-е байта памяти процесса, не более)))
Можно на любой, но во всём важен смысл))) |