Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Запись строки в ComPort - как объяснить


Автор: GrigoriyFomin 30.11.2012, 00:46
Подскажите разницу. Есть обычный внешний диалап-модем, подключенный к ComPort компьютера. 
Пытаюсь записать АТ команду в модем (Delphi XE)
Есть 2 функции записи в компорт - строки и байта (приведены ниже). Если вызываю функцию записи строки (WriteString) - ничего не происходит, модем не реагирует, если пишу побайтово в порт через цикл с WriteChar - все работает. Как такое объяснить? Что приходит на ум - строка пишется в порт в виде юникода, хотя откуда юникод, если строка в функции приводится к pansichar

Подскажите, ибо 3 день бьюсь в догадках

Код

const
  init1= 'ATZ'#13#10;
  init2= 'AT+VCID=1'#13#10;
........

function WriteChar(data: byte): integer;
begin
  WriteBuf(data, 1);
  result := 1;
end;

function WriteBuf(buffer: array of byte; len: integer): integer;
var
  rea: cardinal;
begin
  if (comhandle <> INVALID_HANDLE_VALUE) then WriteFile(comhandle, buffer, len, rea, nil);
  result := rea;
end;



function WriteString(s: string): integer;
var
  rea: cardinal;
  i: integer;
begin
  if (comhandle <> INVALID_HANDLE_VALUE) then
  begin
    WriteFile(comhandle, PAnsiChar(s)^, length(s), rea, nil);
    exit(rea);
  end
  else exit(commerror);
end;


Автор: Qu1nt 30.11.2012, 02:39
Скорее всего:
Код

PAnsiChar(s)^ → AnsiString(s)[1]

Автор: GrigoriyFomin 30.11.2012, 14:38
такое применение вызова этой функции я взял на просторах инета - народ писал, что работает именно в таком варианте, правда я подозреваю, что все дело в юникоде

Автор: Qu1nt 30.11.2012, 15:21
Неужели не помогла замена?

Автор: GrigoriyFomin 1.12.2012, 23:23
я уже проект запустил - менять пока смысла нет. Думал найти чисто академическое объяснение - на будущее. В чем загвоздка теоретическая. Думал, тут очевидный ляп

Автор: ZBugz 2.12.2012, 08:13
Цитата(GrigoriyFomin @ 30.11.2012,  14:38)
правда я подозреваю, что все дело в юникоде

99,9% это так

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)