Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему No value? Почему ничего не передается в процедуру 
:(
    Опции темы
Gnusss
  Дата 20.5.2005, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Привет всем!
Например есть у меня процедура подобная этой:
Код

procedure Fun(Const Val; R: String);
var
 Ms: TMemoryStream;
begin
 Ms:= TMemoryStream.Create;
 Ms.WriteBuffer(Val,SizeOf(Val));
 Ms.Position:= Ms.Size;
 Ms.Free;
 if R = '' then
  R:= ' ';
end;
Я делаю например так:
Код

Fun('Hello!','World!');
// Или так:
Fun(Buff,'World!'); // Buff - Структура типа TRecord

Но в процедуре Fun Val всегда "(No value)".
Почему? Я вообще не понимаю.

Заранее спасибо за ответ!

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  Fun.JPG
PM MAIL   Вверх
SPrograMMer
Дата 20.5.2005, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 2
Всего: 6



Gnusss
Цитата(Gnusss @ 20.5.2005, 23:03)
Код

procedure Fun(Const Val; R: String);

должно быть
Код

procedure Fun(VAR Val; R: String);



--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Gnusss
Дата 20.5.2005, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



to SPrograMMer
неа у меня все равно "(No value)" smile
PM MAIL   Вверх
Fantasist
Дата 20.5.2005, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата(Gnusss @ 20.5.2005, 20:18)
неа у меня все равно "(No value)" smile


Ну так отладчик же не знает тип этой переменной, что он тебе отображать должен?

Нажми Ctrl+F7, напиши там "PChar(@Val)" и любуйся. smile

Это сообщение отредактировал(а) Fantasist - 20.5.2005, 23:36


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Rouse_
Дата 21.5.2005, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Цитата(Fantasist @ 21.5.2005, 00:35)
Нажми Ctrl+F7, напиши там "PChar(@Val)" и любуйся.

Занимательно... У нас за такое сразу увольняют.

Цитата(Gnusss @ 21.5.2005, 00:18)
неа у меня все равно "(No value)" 

Видимо ты забыл про банальное приведение типов. Вот смотри сюда:
Код

procedure Fun(var Val; R: String);
var
 Ms: TMemoryStream;
begin
 Ms:= TMemoryStream.Create;
 Ms.WriteBuffer(BOOL(Val),SizeOf(BOOL(Val)));
 Ms.Position:= Ms.Size;
 Ms.Free;
 if R = '' then
  R:= ' ';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  A: BOOL;
begin
  A:= True;
  Fun(A, 'World!');
end;

А теперь вопрос, каким макаром ты хочешь реальзовать правильное выполнение своей процедуры без обязательной передачи указателя типа данных?


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Gnusss
Дата 21.5.2005, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Цитата(Rouse_ @ 21.5.2005, 01:45)
А теперь вопрос, каким макаром ты хочешь реальзовать правильное выполнение своей процедуры без обязательной передачи указателя типа данных?

Таким же как работает Write у Stream и SendBuffer у TIdUDPClient.
И к тому же в процедуру я передаю РАЗНЫЕ(!) структуры типа TRecord.
PM MAIL   Вверх
p0s0l
Дата 21.5.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Rouse_ @ 21.5.2005, 01:45)
Занимательно... У нас за такое сразу увольняют.
Объясни, что тут такого ужасно неправильного, за что можно сразу уволить ?
Я бы также сделал, если бы знал, что в параметре передаётся строковая константа...



--------------------
С уважением, г-н Посол.
PM   Вверх
помогите
Дата 21.5.2005, 19:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну люди. проблема же еще не рашина.
  Вверх
Fantasist
Дата 22.5.2005, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата(Rouse_ @ 20.5.2005, 22:45)
Занимательно... У нас за такое сразу увольняют.


Че, за польлзование отладчиком у вас увольняют? Не, я к вам работать не пойду. smile

Цитата
Ну люди. проблема же еще не рашина.


Почему?



--------------------
Волны гасят ветер...
PM MAIL   Вверх
Гость_Gnusss
Дата 22.5.2005, 07:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Fantasist @ 22.5.2005, 00:14)
Почему?

Ну, потому - что моя процедура все еще не работает.
У меня в эту процедуру передаются разные структуры типа TRecord. Как я эту могу ему указать?

  Вверх
Fantasist
Дата 22.5.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
Ну, потому - что моя процедура все еще не работает.


Ну так а в чем заключается ее "не работает"? Ту процедуру что ты привел вообще никаких результатов видимых не оставляет (пишишь что-то в память и освобождаешь сразу же). Почему отладчик "no value" показывает уже объяснили.

Единственно что не будет работать это SizeOf(Val) - тип Val неизвестен, по этому SizeOf будет всегда возвращать 0.

Цитата
У меня в эту процедуру передаются разные структуры типа TRecord. Как я эту могу ему указать?


Вот так:
Код

procedure Fun(Const Val:TRecord; R: String);




--------------------
Волны гасят ветер...
PM MAIL   Вверх
Gnusss
Дата 22.5.2005, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Цитата(Fantasist @ 22.5.2005, 19:53)
Ту процедуру что ты привел вообще никаких результатов видимых не ...

Вобщето это процежура для примера, в реальном приложении у меня другая.
Цитата(Fantasist @ 22.5.2005, 19:53)
очему отладчик "no value" показывает уже объяснили

Ну это я понял. smile
Цитата(Fantasist @ 22.5.2005, 19:53)
Вот так:
Код

procedure Fun(Const Val:TRecord; R: String);

Неа, или ты мне предлагаеш вместо TRecord написать тип моих структур?
Тогда у меня в приложении будет где-то 15+ почти одинаковых(только каждая под свою структуру) процедур.

Это сообщение отредактировал(а) Gnusss - 22.5.2005, 22:22
PM MAIL   Вверх
SPrograMMer
Дата 22.5.2005, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 2
Всего: 6



Цитата(Gnusss @ 22.5.2005, 22:20)
Тогда у меня в приложении будет где-то 15+ почти одинаковых(только каждая под свою структуру) процедур

ну тада прямой путь к ООП, написать "класс" родитель, а отнего клепать производные, Тип параметра в самой подпрограмме будет родительский

"класс" в кавычках, потому как я поонимаю он просто будетсодержать ТОЛЬКО данные <=> записи, но с расширенными возможностями! smile


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Gnusss
Дата 23.5.2005, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 19.1.2005

Репутация: нет
Всего: нет



Меня осенило!!! smile
Я все думал почему Write у Stream работает, а у меня вроде тоже самое а не работает.
И вдруг меня осенило Второй параметр у Write это размер(!), и я понял что надо передавать в процедуру еще и размер. Изменив процедуру, у меня все заработало(!). Ура товарищи smile
И не пришлось создавать много одинаковых процедур и прибегать а ООП.
Всем спасибо! Тема закрыта!
PM MAIL   Вверх
Fantasist
Дата 23.5.2005, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Gnusss Хорошо, но в следующий раз постарайся вопрос формулировать так, чтобы и нам было понятно, что тебе нужно, если конечно хочешь ответ на свой вопрос получить, а не на какие-то другие, как здесь и случилось.






--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2876 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.