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

Delphi Sources



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

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

Цитата:
Сообщение от lmikle
lmikle!
.......

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

Цитата:
Сообщение от cadil
Как это условие сформулировать? А вариант работы с циклами не подойдет?
Код:
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}?

Думаю вот такой вариант будет работать:
Код:
{$IF (sizeof(Char)=2)} // для unicode
function COMRead(AHandle: THandle): RawByteString; overload;
function COMWrite(AHandle: THandle; Data: RawByteString): Cardinal; overload;
{$ELSE}
function COMRead(AHandle: THandle): String; overload;
function COMWrite(AHandle: THandle; Data: string): Cardinal; overload;
{$ENDIF}

ну и далее по коду там тоже смотри.

{$ZEROBASEDSTRINGS ON} - это, насколько я понимаю, к данной проблеме никак не относится. Этот ключ определяет с какого индекса начинается строка, с 1 или с 0. ИМХО пофиг, как удобней так и делай.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

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

Цитата:
Сообщение от Aristarh Dark
Думаю вот такой вариант будет работать:
Код:
{$IF (sizeof(Char)=2)} // для unicode
function COMRead(AHandle: THandle): RawByteString; overload;
function COMWrite(AHandle: THandle; Data: RawByteString): Cardinal; overload;
{$ELSE}
function COMRead(AHandle: THandle): String; overload;
function COMWrite(AHandle: THandle; Data: string): Cardinal; overload;
{$ENDIF}
Странно - у меня этот блок не работает.
Правда, функции function COMRead(AHandle: THandle): String; - у меня нет.
Какая из этих функций отвечает за чтение из порта?
Код:
function AccessCOM(P:PChar):boolean;
 stdcall; external 'comapi32.dll';
function OpenCOM(P:PChar):boolean;
 stdcall; external 'comapi32.dll';
function CloseCOM:boolean;
 stdcall; external 'comapi32.dll';
function SetCOM(baud:DWORD;
                bsize,parity,
                sbits:BYTE):boolean;
 stdcall; external 'comapi32.dll';
function SetModCOM(baud:DWORD;bsize,parity,
                sbits:BYTE;DTR,
                RTS:boolean):boolean;
 stdcall; external 'comapi32.dll';
function SetCOMTo(RdIvl,RdTotM,RdTotC,
          WrTotM,WrTotC:DWORD):boolean;
 stdcall; external 'comapi32.dll';
function SetCOMBuff(RdBuff,
                    WrBuff:DWORD):boolean;
 stdcall; external 'comapi32.dll';
function EscFuncCOM(F:DWORD):boolean;
 stdcall; external 'comapi32.dll';
function GetModem(var lpD:DWORD):boolean;
 stdcall; external 'comapi32.dll';
function PurgeCOM:boolean;
 stdcall; external 'comapi32.dll';
function FlushCOM:boolean;
 stdcall; external 'comapi32.dll';
function TxByteCOM(data:byte):boolean;
 stdcall; external 'comapi32.dll';
function TxDataCOM(const Buffer; N:DWORD;
                   var lpNDone:DWORD):boolean;
 stdcall; external 'comapi32.dll';
function RxDataCOM(var Buffer; N:DWORD;
                   var lpNDone:DWORD):boolean;
 stdcall; external 'comapi32.dll';
function ClrErrCOM(var lpE:DWORD):boolean;
 stdcall; external 'comapi32.dll';
или - отсюда?
Код:
  private
    function  ReadParams:Boolean;
    procedure PClear;
    procedure Open_COM(n:Integer);
    procedure DisableControls;
    procedure ReadConfig;


Удивляюсь - неужели фирма-разработчик продукта или наши умельцы не разработали до сих пор патч, чтобы решить вопрос перехода на уникод на системном уровне?!

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

ТС, я тебе дал исходник достаточный для того чтобы пользоваться портом без всяких библиотек. Если ты хочешь чтобы я тебе адаптировал неизвестную мне библиотеку под unicode - зря, я этого делать не буду, во первых некогда, во вторых - неинтересно. У меня куча железа работает на представленном мной модуле и сбоев не наблюдается.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

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

Цитата:
Сообщение от Aristarh Dark
ТС, я тебе дал исходник достаточный для того чтобы пользоваться портом без всяких библиотек. Если ты хочешь чтобы я тебе адаптировал неизвестную мне библиотеку под unicode - зря, я этого делать не буду, во первых некогда, во вторых - неинтересно. У меня куча железа работает на представленном мной модуле и сбоев не наблюдается.
Спасибо! Я как-то сразу не оценил такую возможность.
Ответить с цитированием
  #21  
Старый 12.01.2016, 11:18
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Принудительно указать тип AnsiString вместо String.
lmikle!
Ты был прав! При принудительной замене String на AnsiString, команды, где используются массивы, не выполняются. Например,
Код:
function HConvert(E:TEdit; var H:Byte):Boolean;
var Hp:Byte; S:String; Error:Boolean;
begin
 Hp:=H; Result:=true;
 Error:=false;
 S:=UpperCase(E.Text);
//S:= AnsiString(S);
 case length(S) of
 1: if ConvD(S[1])>=0 then H:=ConvD(S[1])
                     else Error:=true;
...
Как записать этот фрагмент кода, если S:AnsiString; или S:RawByteString;
Заранее благодарю за помощь.
Ответить с цитированием
  #22  
Старый 12.01.2016, 15:23
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
ТС, я тебе дал исходник достаточный для того чтобы пользоваться портом без всяких библиотек.
Aristarh Dark, не обижайся на мои дилетантские вопросы. Объясни, пожалуйста, как твой исходник адаптировать к моему проекту? Вопрос с уникодировкой оказался намного серьезней, чем я мог подумать.

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

Я ж не знаю что там у тебя за проект
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #24  
Старый 12.01.2016, 19:54
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тебе надо не приведение типов делать (оно в таком виде максимум поправил кодовую страницу, если та вдруг не совпадает). Тебе переменную надо объявлять как AnsiString. При этом надо смотреть все места, что бы небыло случайных преобразований обратно. А то вообще чехарда получится такая, что замучаешься понимать, почему не работает.
Вообще, в чем смысл делать исходник, компилируемый в обеих версиях Delphi? У тебя есть D7, там все работает. Ну так и пиши на ней. Я проекты на XE3 перетаскивал только если собирался их продолжать исключительно на XE3, обратно уже все-равно просто так не перетащишь, бо как в XE3 (ну с ней я работаю, есть XE7, но на ней я только под Андроит ковыряюсь) куча изменений в языке и библиотеках, которые не совсем обратно совместимы.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
cadil (12.01.2016)
  #25  
Старый 12.01.2016, 22:05
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Тебе надо не приведение типов делать (оно в таком виде максимум поправил кодовую страницу, если та вдруг не совпадает). Тебе переменную надо объявлять как AnsiString. При этом надо смотреть все места, что бы небыло случайных преобразований обратно. А то вообще чехарда получится такая, что замучаешься понимать, почему не работает.
Вообще, в чем смысл делать исходник, компилируемый в обеих версиях Delphi? У тебя есть D7, там все работает. Ну так и пиши на ней. Я проекты на XE3 перетаскивал только если собирался их продолжать исключительно на XE3, обратно уже все-равно просто так не перетащишь, бо как в XE3 (ну с ней я работаю, есть XE7, но на ней я только под Андроит ковыряюсь) куча изменений в языке и библиотеках, которые не совсем обратно совместимы.
Помучившись недели две я, кажется, в полной мере только сейчас осознал написанное тобой. А относительно разных компиляторов, то так получилось исторически: сначала собрал устройство, потом занялся поиском близкого исходника. Нашел старый исходник от фирмы-производителя микросхемы, написанный на D5. Повозился и запустил проект на D7. Переработал проект под свои задачи и сейчас пытаюсь адаптировать его под мобильное устройство на Андроиде. А зайди я с другого конца - у меня на сегодняшний день вряд ли было бы рабочее приложение.
Ответить с цитированием
  #26  
Старый 12.01.2016, 22:40
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Я ж не знаю что там у тебя за проект
Проект - во вложении. В нем есть внешняя библиотека - comapi32.dll.
Можно такой проект адаптировать под ХЕ7 или приступать к разработке с нуля с твоим исходником?

Последний раз редактировалось cadil, 19.01.2016 в 10:48.
Ответить с цитированием
  #27  
Старый 12.01.2016, 22:48
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от cadil
Помучившись недели две я, кажется, в полной мере только сейчас осознал написанное тобой. А относительно разных компиляторов, то так получилось исторически: сначала собрал устройство, потом занялся поиском близкого исходника. Нашел старый исходник от фирмы-производителя микросхемы, написанный на D5. Повозился и запустил проект на D7. Переработал проект под свои задачи и сейчас пытаюсь адаптировать его под мобильное устройство на Андроиде. А зайди я с другого конца - у меня на сегодняшний день вряд ли было бы рабочее приложение.

Тогда хочу тебя огорчить.
Под Андроид твой проект в таком виде не заведется - не поддерживает Андроид виндовые библиотеки... Да и COM-порта на Андроид-устройствах нету. Как ты его подключать то будешь??? Или это Bluetooth-2-COM?
Вообще, я дальше эксперименов Delphi+Android не пошел пока, т.к. на Java под Android писать проще, особенно, если не требуется особых красот в интерфейсе.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
cadil (13.01.2016)
  #28  
Старый 13.01.2016, 11:01
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Тогда хочу тебя огорчить.
Под Андроид твой проект в таком виде не заведется - не поддерживает Андроид виндовые библиотеки... Да и COM-порта на Андроид-устройствах нету. Как ты его подключать то будешь??? Или это Bluetooth-2-COM?
Вообще, я дальше эксперименов Delphi+Android не пошел пока, т.к. на Java под Android писать проще, особенно, если не требуется особых красот в интерфейсе.
Посмотри, пожалуйста, на картинку. Цитата оттуда же -
Цитата:
Базовый модуль для разработки собственных устройств типа "Умный дом", сопряженных через порт USB с РС на Windows или с Андроид устройством не ниже 3.1 и подключенным портом OTG.
Люди решили аналогичную задачу.

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

Цитата:
Люди решили аналогичную задачу.

Прикольно, СиПиху под андроид заюзали.

Теперь по теме. Скачал проект, посмотрел... Там проект-то, лучше написать 2 программы (под винду и под ведроид) и не париться. Я то думал там проект из 100000 строк кода...

Скинь схему устройства и описание протокола работы, если не жалко. Чисто спортивный интерес.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

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

Цитата:
Сообщение от Aristarh Dark
Прикольно, СиПиху под андроид заюзали.

Теперь по теме. Скачал проект, посмотрел... Там проект-то, лучше написать 2 программы (под винду и под ведроид) и не париться. Я то думал там проект из 100000 строк кода...

Скинь схему устройства и описание протокола работы, если не жалко. Чисто спортивный интерес.
Схема устройства - тут, протокола у меня нет - я нашел исходник от производителя термодатчика.
Из чисто спортивного интереса - помоги, пожалуйста, хотя бы запустить этот проект на ХЕ7.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter