Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 02:20   #1
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию указатель

есть функция, в качестве параметра в нее передается указатель L: pointer.
В этой функции есть локальная переменная B: integer;
Как переменной B присвоить значение первого байта, на который указывает L?
что не так: ??
Код:
B:=byte(L^)
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 22.05.2012, 02:57   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

вы приведение типов делаете, приводите указатель к байту. Что вроде не возможно.
Код:
B:=L^[0] передаем 0-ой байт
Человек_Борща вне форума Ответить с цитированием
Старый 22.05.2012, 03:08   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
что не так: ??
В указанном коде проблемы нет.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.05.2012, 03:15   #4
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
В указанном коде проблемы нет.
ну если бы проблемы не было, я бы сюда не писал! Я в книге видел, что-то вроде integer(msg^), где msg: pointer. По идее и у меня должно работать, но все время выдает ошибку во время выполнения проги на этой строке.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 22.05.2012, 03:19   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Подсказка: это значит, что проблема в другом месте.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.05.2012, 03:44   #6
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Don Karleone Посмотреть сообщение
ну если бы проблемы не было, я бы сюда не писал! Я в книге видел, что-то вроде integer(msg^), где msg: pointer. По идее и у меня должно работать, но все время выдает ошибку во время выполнения проги на этой строке.
Скорее всего произошло нарушение доступа к памяти! Например: L <> nil, но, по данному адресу пусто, в результате вылетает AV.
Miha85193 вне форума Ответить с цитированием
Старый 22.05.2012, 07:23   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но все время выдает ошибку во время выполнения проги
Какую? AV? Надо весь код смотреть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2012, 07:57   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
вы приведение типов делаете, приводите указатель к байту. Что вроде не возможно.
Код:
B:=L^[0] передаем 0-ой байт
Он приводит к байту уже разыменованный указатель, т.е. как раз тот байт, что ему нужен, а у Вас вообще не понятно, сколько байт нужно взять по адресу L.
s-andriano вне форума Ответить с цитированием
Старый 22.05.2012, 22:51   #9
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Вообщем дело обстоит так:
я создаю DIB-секцию функцией CreateDIBSection(), где один из параметров, это указатель на массив байт созданного растра. Этот указатель я передаю своей функции, которая проделывает некую операцию с этими самыми байтами.
Проблема была в том, что перед вызовом своей функции я проделал следующее:
Код:
var
  Bitmap1: HBITMAP;
  DC: HDC;
  P1: pointer;
....

DC:=CreateCompatibleDC(0);
Bitmap1:=CreateDIBSection(..., P1, ...);
SelectObject(DC, Bitmap1);

//а здесь я вызвал свою функцию и передал ей указатель P1
Проблемы нет, если я вызываю свою функцию до вызова SelectObject(...);
Почему именно так, не знаю.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 22.05.2012, 23:02   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ну, даже паяльник не понадобился.

Вопрос №1: где обработка ошибок? С чего ты взял, что в P1 допустимый указатель?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
*указатель = *указатель tiger() Общие вопросы C/C++ 7 10.05.2011 12:49
указатель на указатель петя иванов Общие вопросы C/C++ 5 10.04.2011 02:23
Указатель... Romario92 Общие вопросы C/C++ 16 22.10.2010 20:37
Указатель RobinVit Помощь студентам 3 05.05.2010 16:18
Указатель this Golovastik Общие вопросы C/C++ 8 16.01.2010 10:30