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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача TListItems через SendBuf() 
:(
    Опции темы
TP@MB@Y
Дата 8.7.2005, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На сервере находится ListView. Мне надо послать все его итемы клиенту. Можно конечно же это сделать через строки, но наверника можно легче. Вот что я делаю:

Код

type  event = record
           ...
           list:TListItems;
         end;


Сервер посылает клиентам:
Код

var send:event
 ...
  send.list.Clear;
 for i:=0 to ListView.Items.Count-1 do
  begin
   aItem:=send.list.Add;                                            //aItem:TListItem
   aItem.Assign(ListView.Items.Item[i]);
  end;
 for i:=0 to ssServer.Socket.ActiveConnections - 1 do
  ssServer.Socket.Connections[i].SendBuf(send,sizeof(send));


Клиент получает:
Код

socket.ReceiveBuf(ev,socket.ReceiveLength);  //ev:event
...
ListView.Clear;
 for i:=0 to ev.list.Count-1 do
  begin
    aItem:=ListView.Items.Add;           //aItem:TListItem
    aItem.Assign(ev.list.Item[i]);
  end;


ВЫдается ошибка (при получении) access violation
PM   Вверх
p0s0l
Дата 8.7.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ты засовываешь в список указатели на итемы (но не сами данные итемов), и потом пытаешься передать не сам список, а лишь указатель на список...
Нужно вручную сохранять и восстанавливать свойства TListItem'ов и их передавать...




--------------------
С уважением, г-н Посол.
PM   Вверх
TP@MB@Y
Дата 8.7.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



p0s0l
Всмысле вручную? Например, сделать n-мерный массив строк, заполнить его и отправить?
PM   Вверх
_hunter
Дата 8.7.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



да. прчем массив не стрингов, а массив массивов символов


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
TP@MB@Y
Дата 8.7.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



_hunter
Зачем массив массивов? Я думаю делать двумерный массив стрингов.
PM   Вверх
_hunter
Дата 8.7.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



для экономии smile
если одна строка -- 10 символов, а другая -- 100 в первом случае потратиш 110 байт, во втором 200.
но если памяти не жалко ( а ее щас почти никому не жалко ) можно и простой прямоугольник юзать


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
TP@MB@Y
Дата 8.7.2005, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



_hunter
Теперь понял smile
Ну памяти то не жалко это соамо сабой smile Но вот это же по сети будет прогоняться, так что замечание существенное. Ну ввиду специфики использования такой структуры в моей проге, можно все стринги сократить символов до 15, так что думаю оставить масив строк.

PS Сделал через двумерный массив строк. Все работает smile

Это сообщение отредактировал(а) TP@MB@Y - 8.7.2005, 20:37
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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