Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488

Разные версии Indy

03.06.2017, 11:56. Показов 3293. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне приходится работать в разных версиях делфи. первая делфи7 вторая хе7. Делаю чатик с возможностью голосовых ссобщений для чего надо использовать udp.Хочу поставить свой сервер что бы можно было обмениваться сообщениями не открывая порт. Сервер пишу на хе7 клиент на делфи 7. Делфи 7 использую для клиента потому что у него малый размер выходного файла. UDP в этих делфи разый(версия). Так вот я поставил indy10 в делфи 7. Что были одинаковы версии. Поставил компонент IdUDPServer1 зашел в его события приема сообщения и увидел что буфер для принятых данный используется как TIdBytes. А в той версии которую я поставил в делфи 7 там используется TBytes. Могут быть конфликты этих двух буферов?

Добавлено через 8 минут
И вобще что нового в TIdBytes?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.06.2017, 11:56
Ответы с готовыми решениями:

Разные версии Delphi и разное поведение после компиляции
Есть 2 Delphi. XE7 и Berlin 10.1. Так-же есть планшет(Windows 10) и ПК(Windows 10). Не знаю уж по какой причине но когда я переходил на...

Как для web-версии и мобильной версии поставить разные картинки
Всем добрый вечер! Кто знает, подскажите: мне необходимо для вебверсии и мобильной версии поставить разные картинки.

Подскажите, почему разные версии аиды показывают разные показатели
Аида extreme показывает нагрев проца максимум 70, аида engineer показывает 100, где правда? Также по 12 вольтовой в экстриме показывает 14...

41
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
06.06.2017, 00:06
Студворк — интернет-сервис помощи студентам
ну так и tbuf[0]
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
07.06.2017, 12:41  [ТС]
Спасибо помогло.

Добавлено через 19 часов 28 минут
Кстати
Delphi
1
2
3
    
  Move(WaveHdr.Lpdata[0],tbuf[0],bufsize);//так пашет
  Move(tbuf[0],WaveHdr1.Lpdata[0],bufsize);//так нет
Мне после принятия данный нужно из TIdBytes перевести в WaveHdr для последующего воспроизведения. Что я не так делаю?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.06.2017, 12:57
память выделить и присвоить указатель на нее в WaveHdr1.Lpdata
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
07.06.2017, 13:45  [ТС]
память выделил так:
Delphi
1
GetMem(WaveHdr1.lpData,bufsize);
кАК присвоить указатель?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.06.2017, 14:42
тут вроде вы выделяли по-другому
WaveHdr.lpData:=Pchar(GlobalAlloc(GMEM_F IXED, bufsize));
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
07.06.2017, 14:48  [ТС]
а какая разница?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.06.2017, 14:57
GlobalAlloc берет память у ОС
GetMem - у менеджера памяти
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
07.06.2017, 15:00  [ТС]
я все же не понял как присвоить ему указатель. Как это сделать?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.06.2017, 15:10
пересмотрел еще раз ваш код
вот это вообще мягко говоря странновато
Delphi
1
WaveHdr.lpData:=Pchar(GlobalAlloc(GMEM_FIXED, bufsize));
смотрим в доки
Delphi
1
function GlobalAlloc(GMEM_FIXED, bufsize):cardinal;
это HANDLE системного объекта - куска памяти
для того чтобы получить ссылку на этот кусок нужно сделать GlobalLock()
а у вас
Delphi
1
WaveHdr.lpData:=Pchar(GlobalAlloc(GMEM_FIXED, bufsize));
это должно давать ошибку сразу же по идее
если что-то поделать с WaveHdr.lpData, то ошибка должна быть неминуема
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
07.06.2017, 15:59  [ТС]
так в чем ошибка?

Добавлено через 21 минуту
кстати да.. Делаю так
Delphi
1
2
3
4
var  WaveHdr,WaveHdr1:TWaveHdr;
begin
    Move(WaveHdr,WaveHdr1,bufsize);
end;
Приложение просто исчезает. Но в процессах висит. То-есть пропадает форма. И со временем вылетает AV

Добавлено через 44 секунды
Может пользоваться GetMem вместо GlobalAlloc?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.06.2017, 15:59
это надо брать проект и в отладчик
1
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
07.06.2017, 16:04  [ТС]
что нужно именно искать?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.06.2017, 16:07
ну вот первую ошибку я вам указал. может там и getmem подойдет, не знаю.
первая ошибка - это вообще начать разбираться с winapi. там можно убиться...
с готовой библиотекой нет всех этих заморочек
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
07.06.2017, 17:43  [ТС]
У меня в bufsize хранится размер считываемого буфера.
Определяю его так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
    with waveformat do
    begin
      nChannels:=1;
      wFormatTag:=WAVE_FORMAT_PCM;
      nSamplesPerSec:=8000;
      wBitsPerSample:=8;
      nBlockAlign:=1;
      nAvgBytesPerSec:=8000;
      cbSize:=0;
    end;
    bufsize:= waveformat.nAvgBytesPerSec*2 div 16;
до момента когда я хочу скопировать память из WaveHdr в WaveHdr1 его размер составлял 1000. А после смотрите сами. Что могло к этому привести?
Миниатюры
Разные версии Indy  
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
07.06.2017, 20:30
то что я уже показал
вы садите в pchar совершенно левое значение, по которому фигачите данные.
повезло, что не валится сразу, но эти данные ясно что-то затирают
и со временем получаем ошибку
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
08.06.2017, 12:06  [ТС]
заменил GlobalAlloc на GetMem проблема осталась

Добавлено через 12 часов 13 минут
Все вроде уже решил. Звук передается. Но с задержками.Рывками. Я предполагаю что косяк в этом. У меня размер буфера всего 1000байт. Не подскажите самый оптимальный размер?
Delphi
1
2
3
4
5
6
7
8
9
10
    with waveformat do
    begin
      nChannels:=1;
      wFormatTag:=WAVE_FORMAT_PCM;
      nSamplesPerSec:=8000;
      wBitsPerSample:=8;
      nBlockAlign:=1;
      nAvgBytesPerSec:=8000;
      cbSize:=0;
    end;
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
08.06.2017, 13:04
память нынче дешевая, пара мегабайт всегда есть
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
08.06.2017, 13:58  [ТС]
я не понял что вы имели виду
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
08.06.2017, 14:04
Цитата Сообщение от Олег2000про Посмотреть сообщение
самый оптимальный размер?
сколько вздумается
кол-во секунд в буфере = 44100Hz*2канала*2 байта;
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
08.06.2017, 14:57  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
кол-во секунд в буфере = 44100Hz*2канала*2 байта;
Это максимальные значения?

Добавлено через 1 минуту
Цитата Сообщение от krapotkin Посмотреть сообщение
кол-во секунд в буфере = 44100Hz*2канала*2 байта;
Это максимальные значения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2017, 14:57

Разные версии VS находят разные SerialPort
Есть большой чужой проект, состящии из основного проекта и компонентов. Все это написано на VS2003 При компиляции на 2008 выскакивает...

Indy 10 : замена версии в RAD XE
Всем привет, помогите установить а точнее обновить Indy до 10 версии у меня стоит C++ XE....

UDP, версии Indy и сборка пакетов
Стала тут передо мной задачка. Есть устройство в сети, его надо опрашивать через UDP протокол, посредством отправки фиксированной пачки...

Использование компенента Indy IdTCPServer в зависимости от версии (D7 или D2010)
Добрый день. Для Д7 есть следующий код: type procedure IdTCPServer1Execute(AThread: TIdPeerThread); var Form1: TForm1; ...

Разные версии Access
Всем привет, помогите пожалуйста. Сделала базу данных Кредиты, всё работает. но столкнулась с проблемой выбора провайдера. Подключение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru