Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.139.59] |
|
Сообщ.
#1
,
|
|
|
Был у меня старый код
uses windows, ... procedure SendSMS(AComPort: integer; AMsg: String; ANumTel: String); var hFile: THandle; procedure WriteStr(AStr: String); //пишет в порт переданную строку var LWrited: Cardinal; begin //Пишем в порт WriteFile(hFile, PAnsiChar(AStr)^, Length(AStr), LWrited, nil); end; begin //открываем порт hFile := Windows.CreateFile(PChar({}'\\.\COM' + IntToStr(AComPort)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); //если открылся if (hFile <> INVALID_HANDLE_VALUE) then begin try //устанавливаем текстовый режим WriteStr('AT+CMGF=1' + #$D#$A); //вводим номер в формате "+79xxxxxxxxx" WriteStr('AT+CMGS="'+ANumTel+'"' + #$D#$A); //вводим текст сообщения, только латиница WriteStr(AMsg + #$D#$A#$1A); finally //закрываем порт Windows.CloseHandle(hFile); end; end;// else showmessage('NOT OPEN'); end; На Delphi 7 работает идеально, но при переходе на Delphi XE5 перестал. Особенностью данного кода есть то, что если в AMsg будет хоть один символ НЕ ЛАТИНИЦЕЙ, то смс не отправляется. До чего докопал: //открываем порт hFile := Windows.CreateFile(PChar({}'\\.\COM' + IntToStr(AComPort)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); В (windows.createfile), делфи7 при создании файла, он как я понял, идёт ANSI, а XE уже в кодировке WIDE. Пробовал и перебивать текст команд в ANSI из UTF8, и создал под делфи7 SMS.dll c этой процедурой... всё равно. даже dll работает только из delphi7, а на delphi XE не хочет Пробовал обрезать переход на новую строку TRIM, но всё равно... Отправляю вот так sendsms(4, 'aaa', '+3809хххххххх'); Подскажите пожалуйста как заставить этот код работать под XE |
Сообщ.
#2
,
|
|
|
Цитата dreyqq @ WriteFile(hFile, PAnsiChar(AStr)^, Length(AStr), LWrited, nil); WriteFile(hFile, PAnsiChar(AnsiString(AStr))^, Length(AStr), LWrited, nil); |