![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Цитата:
....... Последний раз редактировалось cadil, 12.01.2016 в 10:59. |
|
#17
|
||||
|
||||
|
Цитата:
Думаю вот такой вариант будет работать: Код:
{$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
|
|||
|
|||
|
Цитата:
Правда, функции 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
|
||||
|
||||
|
ТС, я тебе дал исходник достаточный для того чтобы пользоваться портом без всяких библиотек. Если ты хочешь чтобы я тебе адаптировал неизвестную мне библиотеку под unicode - зря, я этого делать не буду, во первых некогда, во вторых - неинтересно. У меня куча железа работает на представленном мной модуле и сбоев не наблюдается.
|
| Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
cadil (11.01.2016)
| ||
|
#20
|
|||
|
|||
|
Цитата:
|
|
#21
|
|||
|
|||
|
Цитата:
Ты был прав! При принудительной замене 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;
...Заранее благодарю за помощь. |
|
#22
|
|||
|
|||
|
Цитата:
Последний раз редактировалось cadil, 12.01.2016 в 15:25. |
|
#23
|
||||
|
||||
|
Я ж не знаю что там у тебя за проект
![]() |
|
#24
|
|||
|
|||
|
Тебе надо не приведение типов делать (оно в таком виде максимум поправил кодовую страницу, если та вдруг не совпадает). Тебе переменную надо объявлять как AnsiString. При этом надо смотреть все места, что бы небыло случайных преобразований обратно. А то вообще чехарда получится такая, что замучаешься понимать, почему не работает.
Вообще, в чем смысл делать исходник, компилируемый в обеих версиях Delphi? У тебя есть D7, там все работает. Ну так и пиши на ней. Я проекты на XE3 перетаскивал только если собирался их продолжать исключительно на XE3, обратно уже все-равно просто так не перетащишь, бо как в XE3 (ну с ней я работаю, есть XE7, но на ней я только под Андроит ковыряюсь) куча изменений в языке и библиотеках, которые не совсем обратно совместимы. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
cadil (12.01.2016)
| ||
|
#25
|
|||
|
|||
|
Цитата:
|
|
#26
|
|||
|
|||
|
Цитата:
Можно такой проект адаптировать под ХЕ7 или приступать к разработке с нуля с твоим исходником? Последний раз редактировалось cadil, 19.01.2016 в 10:48. |
|
#27
|
|||
|
|||
|
Цитата:
Тогда хочу тебя огорчить. Под Андроид твой проект в таком виде не заведется - не поддерживает Андроид виндовые библиотеки... Да и COM-порта на Андроид-устройствах нету. Как ты его подключать то будешь??? Или это Bluetooth-2-COM? Вообще, я дальше эксперименов Delphi+Android не пошел пока, т.к. на Java под Android писать проще, особенно, если не требуется особых красот в интерфейсе. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
cadil (13.01.2016)
| ||
|
#28
|
|||
|
|||
|
Цитата:
Цитата:
Последний раз редактировалось cadil, 13.01.2016 в 11:10. |
|
#29
|
||||
|
||||
|
Цитата:
Прикольно, СиПиху под андроид заюзали. Теперь по теме. Скачал проект, посмотрел... Там проект-то, лучше написать 2 программы (под винду и под ведроид) и не париться. Я то думал там проект из 100000 строк кода... Скинь схему устройства и описание протокола работы, если не жалко. Чисто спортивный интерес. |
| Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
cadil (13.01.2016)
| ||
|
#30
|
|||
|
|||
|
Цитата:
Из чисто спортивного интереса - помоги, пожалуйста, хотя бы запустить этот проект на ХЕ7. |