Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.06.2018, 20:13
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
Вопрос Перенос библотеки AsyncFree104

Доброго времени суток.
Имеется библиотека AsyncFree104 для работы с COM портом под Delphi 7
Хотелось бы установить её под Embarcadero RAD Studio 10.2.3
Но в процессе компиляции я получаю ошибки типа:
Код:
[dcc32 Error] AfComPort.pas(655): E2010 Incompatible types: 'Char' and 'AnsiChar'
[dcc32 Error] AfComPort.pas(656): E2010 Incompatible types: 'Char' and 'AnsiChar'
[dcc32 Error] AfComPort.pas(830): E2010 Incompatible types: 'AnsiChar' and 'Char'
[dcc32 Error] AfComPort.pas(831): E2010 Incompatible types: 'AnsiChar' and 'Char'

Пробовал подставлять разные типы но к рабочему результату это не привело(
Ответить с цитированием
  #2  
Старый 05.06.2018, 21:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ожидаемо.
Дело в том, что версии с 2009 являются юникодными, т.е. sizeOf(Char) = 2.
Тип AnsiChar обратно совместим с Char для версий младше 2009, т.е. sizeOf(AnsiChar) = 1.
Т.О., тебе надо посмотреть где и на какой тип надо изменить типы данных для исправления. Как я полагаю, надо в этой библиотеке везде использовать AnsiChar (т.к. скорее все там расчитано на однобайтовые данные) и, возможно, поднаписать врапперов для использования с юникодными символами.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Amilman (08.06.2018)
  #3  
Старый 06.06.2018, 04:28
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
Вопрос

Ошибки ушли но есть еще один вопрос.
В pas файле AfComPortCore
Встречаются строки типа
Код:
constructor TAfComPortEventThread.Create(AComPortCore: TAfComPortCore);
begin
  inherited Create(AComPortCore);
  FOnPortEvent := AComPortCore.FOnPortEvent;
  Resume;
end;

constructor TAfComPortWriteThread.Create(AComPortCore: TAfComPortCore);
begin
  inherited Create(AComPortCore);
  FlushDoneEvent := CreateEvent(nil, False, False, nil);
  FlushEvent := CreateEvent(nil, False, False, nil);
  WriteEvent := CreateEvent(nil, False, False, nil);
  WriteBuffer := TAfCircularBuffer.Create(AComPortCore.FOutBuffSize);
  Resume;
end;

Так как Resume больше не используюется, пользуемся start.
Но тогда при попытке запуска потока я получаю ошибку:
Cannot call Start on a running or suspended thread.

А если я просто удаляю Resume то программа компилируется и даже вроде как работает но как-то не корректно.

Может нужно был сделать все как-то иначе?
Ответить с цитированием
  #4  
Старый 06.06.2018, 21:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну правильно тебе говорят. Start - это для рестарта потока, а вот Resume - для возобновления работы потока. Так что оставь Resume.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Amilman (08.06.2018)
  #5  
Старый 07.06.2018, 05:26
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
Злость

Скомпилировал терминал. Отправляю команды на устройство но оно не отвечает.
В итоге выяснилось что при отправке уходят исковерканные команды..
Пример:
Прибор должен был получить команду вида:
Код:
 24 57 50 2B 55 4E 43 46 47 2B 35 36 38 3D 30 30   $WP+UNCFG+568=00
 30 30 2C 3F                                       00,?
А получает:
Код:
 24 00 57 00 50 00 2B 00 55 00 4E 00 43 00 46 00   $.W.P.+.U.N.C.F.
 47 00 2B 00                                       G.+.
Ответить с цитированием
  #6  
Старый 07.06.2018, 05:50
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Может ли это зависеть от того что Char заменили на AnsiChar?
Ответить с цитированием
  #7  
Старый 07.06.2018, 19:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

нет, это где-то внутри библиотеки все еще сидят Char и String вместо AnsiChar и AnsiString. Delphi автоматически их кастит. Придется лезть внутрь сырцов.

А что, новой версии, поддерживающей unicode, нету?
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Amilman (08.06.2018)
  #8  
Старый 08.06.2018, 04:04
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Данную версию, перестали поддерживать еще вроде как году 2002, есть чуть новее версия, но там и компонентов прибавилось а соответственно и исправление кода да и копание в исходниках еще больше, еще дольше. Мне же нужно просто подключиться к прибору, считать команды, отослать свои команды да и все на этом.

А если будут встречаться строки с типом PChar их менять на PAnsiChar?
Пример:
FData: PChar;

Последний раз редактировалось Amilman, 08.06.2018 в 04:11.
Ответить с цитированием
  #9  
Старый 08.06.2018, 06:16
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

То есть не PAnsiChar а PWideChar
Ответить с цитированием
  #10  
Старый 08.06.2018, 06:21
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Amilman
Данную версию, перестали поддерживать еще вроде как году 2002, есть чуть новее версия, но там и компонентов прибавилось а соответственно и исправление кода да и копание в исходниках еще больше, еще дольше. Мне же нужно просто подключиться к прибору, считать команды, отослать свои команды да и все на этом.

А если будут встречаться строки с типом PChar их менять на PAnsiChar?
Пример:
FData: PChar;

Именно.
WideChar это фактически тоже самое, что и Char в юникодеых Дельфях. А тебе нужен, походу, именно Char - однобайтовый.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Amilman (08.06.2018)
  #11  
Старый 08.06.2018, 06:43
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Все! После дополнительных правок, терминал начал отправлять команды корректно.
Если кому пригодится, то я залил рабочую библиотеку (покрайней мере рабочую для моих нужд) на mail.диск:
https://cloud.mail.ru/public/4pit/6XuZpXWRi

lmikle, спасибо вам большое за за ценную информацию, без вас бы наверно еще долго разбирался что к чему.

Последний раз редактировалось Amilman, 08.06.2018 в 06:45.
Ответить с цитированием
  #12  
Старый 08.06.2018, 21:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да всегда пожалуйста. Выложи что-ли в исходники на сайте, а то вдруг подохнет на диске...
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:04.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter