|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Delphi XE7 - проблемы с COM-портом
Программа - USB-термометр более-менее успешно компилируется DELPHI 7SE.
Этот же проект запускается (компилируется) редактором Delphi XE7, но COM-порт, к которому подключен термометр - не распознается. Для наглядности - во вложении скрин. Из первой картинки видно, что при компиляции DELPHI 7SE порт СОМ1, к которому подключено устройство, распознается (порт в меню выделен цветом). С Delphi XE7 я не могу добиться распознавания порта (последняя картинка). Помогите решить эту проблему с распознаванием порта. Заранее благодарю. И еще ... Аналогичная проблема была и с Delphi 2009. Думаю - мудрит Embarcadero: более поздняя версия продукта не всегда поддерживает проекты, собранные на более ранних версиях. Последний раз редактировалось cadil, 04.01.2016 в 21:09. |
#2
|
|||
|
|||
Видимо, опять непонятки с AnsiString и UnicodeString.
|
#3
|
|||
|
|||
Цитата:
Последний раз редактировалось cadil, 04.01.2016 в 21:32. |
#4
|
|||
|
|||
Принудительно указать тип AnsiString вместо String.
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
cadil (12.01.2016)
|
#5
|
|||
|
|||
Цитата:
Проект на ХЕ7 компилируется, но с тем же отрицательным результатом - СОМ-порт не распознается, на 7SE - проект без проблем запускается и с новым типом переменных. Какие версии еще стоит проверить, где копать? Последний раз редактировалось cadil, 05.01.2016 в 22:03. |
#6
|
|||
|
|||
Покажи код - как ты определяешь порт.
Может там еще надо и др. функцию использовать принудительно (xxxA, а не xxxW, на которую замаплена оригинальная xxx). И, кстати, вот еще почитай: http://stackoverflow.com/questions/1...ports-in-win32 Последний раз редактировалось lmikle, 06.01.2016 в 01:47. |
#7
|
|||
|
|||
Цитата:
|
#8
|
|||
|
|||
Ну, у тебя в сырцах я все еще вижу вызов и декларацию функций с PChar.
И еще. Там, может, не boolean, а BOOL тип использоваться. Тоже на разных версиях могут быть расхождения... хотя это должно быть совместимо. |
#9
|
|||
|
|||
Цитата:
Код:
[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
|
|||
|
|||
нет, это специальное предупреждение.
Кстати, проверь-ка с какого символа у тебя строки начинаются в XE7? С 0 или с 1 (поиск в помощь, тут в какой-то теме уже писал про это). |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
cadil (09.01.2016)
|
#11
|
|||
|
|||
Цитата:
Почитал о 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; 4. Еще одну версию прочитал в нете: Все зависит от того на какой версии Дельфи ты компилишь данный код, если на ANSI, то один символ = один байт, если на Unicode, то один символ - два байта. В этом направлении стоит что-то предпринимать? Если - да, то что? Извини за большое количество вопросов. Понимаю, что вопросы ставить легче, чем отвечать на них, но самостоятельно ответы на эти вопросы я буду искать вечность! Последний раз редактировалось cadil, 10.01.2016 в 15:33. |
#12
|
||||
|
||||
Я делал так, правда тестировалось только на XE, но проблем с длинными строками не наблюдал.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
cadil (11.01.2016)
|
#13
|
|||
|
|||
Цитата:
У меня с {$IFDEF VER220} ошибка: Цитата:
Последний раз редактировалось cadil, 11.01.2016 в 12:05. |
#14
|
||||
|
||||
Цитата:
Правильнее будет для всех unicode версий сделать условие. Я не заморачивался, потому что у меня только XE. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#15
|
|||
|
|||
Цитата:
Код:
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. |