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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Результаты опроса: Стоит ли использовать ActiveX, написанный на Delphi, в своих приложениях
Нет 1 14.29%
Да 3 42.86%
В зависимости от кривизны рук разработчика 4 57.14%
Лучше писать ActiveX на другом языке 2 28.57%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 7. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2010, 00:05   #21
Konstantin_V
Новичок
Джуниор
 
Регистрация: 21.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от maxionans Посмотреть сообщение
Integer(PValues) <- так в данном случае делать нельзя. Попробуйте заменить на PValues^[ 0 ].
Это будет два разных значения:
1 -> указатель на первый элемент массива;
2 -> значение первого элемента массива.
Konstantin_V вне форума Ответить с цитированием
Старый 22.02.2010, 00:10   #22
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

вы же сами сказали, что второй параметр объявлен как var Values : Integer, поэтому при передаче Integer(PValues) функция получит указатель на указатель - var-параметры сами по себе передаются через указатели. В случае с PValues^[ 0 ] будет передан указатель на первый элемент массива.
maxionans вне форума Ответить с цитированием
Старый 22.02.2010, 00:13   #23
Konstantin_V
Новичок
Джуниор
 
Регистрация: 21.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от maxionans Посмотреть сообщение
вы же сами сказали, что второй параметр объявлен как var Values : Integer, поэтому при передаче Integer(PValues) функция получит указатель на указатель - var-параметры сами по себе передаются через указатели. В случае с PValues^[ 0 ] будет передан указатель на первый элемент массива.
тогда уж не PValues^[ 0 ], а PValues[ 0 ], т.к. это у нас и так указатель
Konstantin_V вне форума Ответить с цитированием
Старый 22.02.2010, 00:15   #24
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

записи PValues^[ 0 ] и PValues[ 0 ] в данном случае имеют один и тот же смысл.
maxionans вне форума Ответить с цитированием
Старый 22.02.2010, 00:16   #25
Konstantin_V
Новичок
Джуниор
 
Регистрация: 21.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от maxionans Посмотреть сообщение
записи PValues^[ 0 ] и PValues[ 0 ] в данном случае имеют один и тот же смысл.
попробывал, результат тотже
Konstantin_V вне форума Ответить с цитированием
Старый 22.02.2010, 00:25   #26
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Кстати, проблема тут вообще не в передаче массива - вы же передавали массив как Integer(PValues) и после этого смогли спокойно обращаться к элементам массива. Это говорит о том, что функция вообще не трогает этот параметр, т.к. в противном случае, если бы функция изменяла массив, она бы поместила своё значение в указатель PValues и при обращении к массиву после вызова вы бы получили access violation или совершнно другие значения массива. Ищите проблему в другом месте.
maxionans вне форума Ответить с цитированием
Старый 22.02.2010, 00:28   #27
Konstantin_V
Новичок
Джуниор
 
Регистрация: 21.02.2010
Сообщений: 17
По умолчанию

Это функция и не трогает передаваемый параметр, она по этому указателю размещает свои значения
Konstantin_V вне форума Ответить с цитированием
Старый 22.02.2010, 00:32   #28
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

У меня складывается впечатление, что вы вообще не вдумываетесь в то, что я пишу. Еще раз повторяю: Integer(PValues) передаёт указатель на PValues - т.е. указатель на указатель, и со стороны функции первым элементом массива по полученному указателю будет значение указателя PValues. Теперь сопоставьте это с моим предыдущим сообщением.
maxionans вне форума Ответить с цитированием
Старый 22.02.2010, 00:40   #29
Konstantin_V
Новичок
Джуниор
 
Регистрация: 21.02.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от maxionans Посмотреть сообщение
У меня складывается впечатление, что вы вообще не вдумываетесь в то, что я пишу. Еще раз повторяю: Integer(PValues) передаёт указатель на PValues - т.е. указатель на указатель, и со стороны функции первым элементом массива по полученному указателю будет значение указателя PValues. Теперь сопоставьте это с моим предыдущим сообщением.
Integer() требует в качестве параметра указатель, в противном случае будет ошибка компиляции
Konstantin_V вне форума Ответить с цитированием
Старый 22.02.2010, 00:52   #30
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Я с самого начала сказал, что объявление var Values : Integer для передачи массива вводит в заблуждение - вот с вами это и случилось. Не ломайте мозг ни себе, ни другим людям - замените в объявлении функции этот параметр на Values : PInteger (без var) и дальнейшая работа с этой функцией станет намного прозрачней.

Последний раз редактировалось maxionans; 22.02.2010 в 00:56.
maxionans вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание\использование своих DLL библиотек Vol666 Общие вопросы Delphi 5 26.08.2009 11:55
использование в delphi com объектов Anekdot Помощь студентам 0 18.06.2009 19:54
Использование JavaScript в Delphi... Valdis Общие вопросы Delphi 2 27.09.2007 08:45
Использование JPEG в Delphi 7 Aslan Мультимедиа в Delphi 11 02.08.2007 13:25
Использование функции Excel из Delphi Геля Общие вопросы Delphi 3 07.06.2007 07:33