![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Программа - 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. |