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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.01.2016, 12:59
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию Delphi XE7 - проблемы с COM-портом

Программа - USB-термометр более-менее успешно компилируется DELPHI 7SE.
Этот же проект запускается (компилируется) редактором Delphi XE7, но COM-порт, к которому подключен термометр - не распознается.
Для наглядности - во вложении скрин. Из первой картинки видно, что при компиляции DELPHI 7SE порт СОМ1, к которому подключено устройство, распознается (порт в меню выделен цветом). С Delphi XE7 я не могу добиться распознавания порта (последняя картинка).
Помогите решить эту проблему с распознаванием порта. Заранее благодарю.
И еще ... Аналогичная проблема была и с Delphi 2009. Думаю - мудрит Embarcadero: более поздняя версия продукта не всегда поддерживает проекты, собранные на более ранних версиях.
Изображения
Тип файла: jpg COM_1.jpg (78.1 Кбайт, 12 просмотров)

Последний раз редактировалось cadil, 04.01.2016 в 21:09.
Ответить с цитированием
  #2  
Старый 04.01.2016, 18:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Видимо, опять непонятки с AnsiString и UnicodeString.
Ответить с цитированием
  #3  
Старый 04.01.2016, 21:29
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Видимо, опять непонятки с AnsiString и UnicodeString.
Почитал об этой проблеме тут -Delphi и кодировка Unicode. Вопрос очень серьезный. Посоветуйте - как решить эту проблему? Спасибо!

Последний раз редактировалось cadil, 04.01.2016 в 21:32.
Ответить с цитированием
  #4  
Старый 04.01.2016, 22:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Принудительно указать тип AnsiString вместо String.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
cadil (12.01.2016)
  #5  
Старый 05.01.2016, 20:32
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Принудительно указать тип AnsiString вместо String.
Заменил тип String на AnsiString и Char на AnsiChar.
Проект на ХЕ7 компилируется, но с тем же отрицательным результатом - СОМ-порт не распознается, на 7SE - проект без проблем запускается и с новым типом переменных.
Какие версии еще стоит проверить, где копать?

Последний раз редактировалось cadil, 05.01.2016 в 22:03.
Ответить с цитированием
  #6  
Старый 06.01.2016, 01:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Покажи код - как ты определяешь порт.
Может там еще надо и др. функцию использовать принудительно (xxxA, а не xxxW, на которую замаплена оригинальная xxx).

И, кстати, вот еще почитай:
http://stackoverflow.com/questions/1...ports-in-win32

Последний раз редактировалось lmikle, 06.01.2016 в 01:47.
Ответить с цитированием
  #7  
Старый 07.01.2016, 19:08
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Покажи код - как ты определяешь порт.
Практически оригинальный код - во вложении.
Вложения
Тип файла: zip heat_1.zip (267.5 Кбайт, 8 просмотров)
Ответить с цитированием
  #8  
Старый 07.01.2016, 22:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, у тебя в сырцах я все еще вижу вызов и декларацию функций с PChar.
И еще. Там, может, не boolean, а BOOL тип использоваться. Тоже на разных версиях могут быть расхождения... хотя это должно быть совместимо.
Ответить с цитированием
  #9  
Старый 08.01.2016, 15:05
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, у тебя в сырцах я все еще вижу вызов и декларацию функций с PChar.
И еще. Там, может, не boolean, а BOOL тип использоваться. Тоже на разных версиях могут быть расхождения... хотя это должно быть совместимо.
В D7SE при компиляции выводятся предупреждения:
Код:
[Warning] DS1820_Main.pas(112): Unsafe type 'PChar' 
в местах
Код:
function OpenCOM(P:PChar):boolean;
Раньше на них не обращал внимания - проект компилируется и проблем, вроде, нет. Сейчас, когда появились проблемы, начал присматриваться к предупреждениям.
Указал тип AnsiString вместо String, PAnsiChar вместо PChar, BOOL - BOOLEAN, но предупреждение как было так и осталось -
Код:
[Warning] DS1820_Main.pas(112): Unsafe type 'PAnsiChar'
Как устранить это предупреждение? Может в этом корень зла?
Ответить с цитированием
  #10  
Старый 08.01.2016, 19:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

нет, это специальное предупреждение.
Кстати, проверь-ка с какого символа у тебя строки начинаются в XE7? С 0 или с 1 (поиск в помощь, тут в какой-то теме уже писал про это).
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
cadil (09.01.2016)
  #11  
Старый 09.01.2016, 11:40
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
...
Кстати, проверь-ка с какого символа у тебя строки начинаются в XE7? С 0 или с 1 (поиск в помощь, тут в какой-то теме уже писал про это).
Спасибо!
Почитал о 0-индексированных строках тут.
1. Внешне простая рекомендация "...если вы добавите {$ZEROBASEDSTRINGS ON} перед кодом ..., то получите..." , но как ее выполнить?
2. Объясни, пожалуйста, популярно - как использовать следующий код в решении моих проблем?
Код:
var
  S: string; 
  I: Integer;
  ch1: Char;
begin
  // Универсальный, вариант 1
  // (работает для любых настроек, 
  // доступен, начиная с Delphi 2006)
  for ch1 in S do
    use(ch1);
 
  // Универсальный, вариант 2
  // (работает для любых настроек, 
  // доступен, начиная с Delphi XE3)
  for I := Low(S) to High(S) do
    use(S[i]);
end;
3. Как выяснить - с какого символа начинаются строки?
4. Еще одну версию прочитал в нете: Все зависит от того на какой версии Дельфи ты компилишь данный код, если на ANSI, то один символ = один байт, если на Unicode, то один символ - два байта. В этом направлении стоит что-то предпринимать? Если - да, то что?
Извини за большое количество вопросов. Понимаю, что вопросы ставить легче, чем отвечать на них, но самостоятельно ответы на эти вопросы я буду искать вечность!

Последний раз редактировалось cadil, 10.01.2016 в 15:33.
Ответить с цитированием
  #12  
Старый 11.01.2016, 10:33
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Я делал так, правда тестировалось только на XE, но проблем с длинными строками не наблюдал.
Вложения
Тип файла: pas COMUtils.pas (12.3 Кбайт, 9 просмотров)
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
cadil (11.01.2016)
  #13  
Старый 11.01.2016, 11:15
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Я делал так, правда тестировалось только на XE, но проблем с длинными строками не наблюдал.
Спасибо! Поясни, пожалуйста, работать только с {$IFDEF VER220} // для delphi xe ?
У меня с {$IFDEF VER220} ошибка:
Цитата:
[dcc32 Fatal Error] thermo_14XE3_.pas(145): E2280 Unterminated conditional directive
И еще ... Вчера бессистемно ставил {$ZEROBASEDSTRINGS ON} и где-то на 4-ом десятке добился компиляции проекта в полном объеме. Переименовал проект, но успех не закрепился. Такое ощущение, что проблема в чем-то другом. Может пробема в: подключении внешней библиотеки, файле .res, обнулении буфера устройства путем отключения? Такой эффект у меня был один раз в D2009 без использования {$ZEROBASEDSTRINGS ON}.

Последний раз редактировалось cadil, 11.01.2016 в 12:05.
Ответить с цитированием
  #14  
Старый 11.01.2016, 11:54
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
{$IFDEF VER220}
Это конкретно XE, какое значение VERxxx для XE7 - я не знаю, смотри сам.
Правильнее будет для всех unicode версий сделать условие. Я не заморачивался, потому что у меня только XE.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #15  
Старый 11.01.2016, 12:16
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Правильнее будет для всех unicode версий сделать условие. ...
Как это условие сформулировать? А вариант работы с циклами не подойдет?
Код:
var
  S: string; 
  I: Integer;
  ch1: Char;
begin
  // Универсальный, вариант 1
  // (работает для любых настроек, 
  // доступен, начиная с Delphi 2006)
  for ch1 in S do
    use(ch1);
 
  // Универсальный, вариант 2
  // (работает для любых настроек, 
  // доступен, начиная с Delphi XE3)
  for I := Low(S) to High(S) do
    use(S[i]);
end;

В чем недостаток {$ZEROBASEDSTRINGS ON}?

Последний раз редактировалось cadil, 11.01.2016 в 12:22.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter