![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перевести текст из WIN кодировки в DOS кодировку ? [D7, Win2k]
Slonco © (2004-10-01 09:26:00)Пробовал функцию AnsiToOEM - выдала ошибку "Access violation". Такое впечатление, что этой функции просто нет (хотя при Ctrl+SPACE выдает ее подсказкой). Есть ли еще способы? Или я не так использую эту функцию?
Спасибо.
Суслик (2004-10-01 10:35:00) [1]
> Неа, так тоже не прокатит
Враки:)
Slonco (2004-10-01 10:33:00) [2]Неа, так тоже не прокатит. Вобщем решилось все таким образом (ответ нашелся в Королевстве Дельфи http://delphi.vitpc.com/asp/answer.asp?IDAnswer=2381 ):
procedure BroadCst;
var
i: Integer;
Str: PChar;
SLst: TStringList;
F: TextFile;
begin
AssignFile(F,ChangeFileExt(Application.ExeName,'.bat'));
Rewrite(F);
IniRead;
SLst:=TStringList.Create;
SLst.DelimitedText:=SendTo;
for i:=0 to SLst.Count-1 do begin
Str:=PChar('net send '+SLst[i]+' "'+Msg+'"');
CharToOEMBuff(Str,Str,Length(Str)); вот собственно и все!
Writeln(F,Str);
end;
CloseFile(F);
SLst.Free;
WinExec(pansichar(ChangeFileExt(Application.ExeName,'.bat')),SW_RESTORE);
end;
Большое спасибо всем кто проявил участие. Особый респект мелкому полевому грызуну ;)
panov (2004-10-01 10:24:00) [3]
function Win2Dos(const aStr: String): String;
begin
Result := aStr;
if Result='' then Exit;
CharToOem(PChar(Result),PChar(Result));
end;
function Dos2Win(const aStr: String): String;
begin
Result := aStr;
if Result='' then Exit;
OemToChar(PChar(Result),PChar(Result));
end;
Rutven (2004-10-01 10:02:00) [4]GetMem - FreeMem
Slonco (2004-10-01 09:55:00) [5]однако память не выделил, скорее всего...
А как ее выделять в данном примере?
суслик (2004-10-01 09:53:00) [6]под приемник надо выделять память.
Slonco (2004-10-01 09:48:00) [7]Вот, словом, кусок кода, к которому я пришел:
procedure BroadCst;
var
i: Integer;
Str,Src: PChar;
SLst: TStringList;
F: TextFile;
begin
AssignFile(F,ChangeFileExt(Application.ExeName,'.bat'));
Rewrite(F);
IniRead;
SLst:=TStringList.Create;
SLst.DelimitedText:=SendTo;
for i:=0 to SLst.Count-1 do begin
Src:=PChar('net send '+SLst[i]+' "'+Msg+'"');
CharToOEM(Src,Str);
Writeln(F,Str);
end;
CloseFile(F);
SLst.Free;
WinExec(pansichar(ChangeFileExt(Application.ExeName,'.bat')),SW_RESTORE);
end;
Поясню. Мне надо составить bat-файл и запустить его. Все хорошо, но сообщения передаются в виде иероглифов. Что CharToOEM, что AnsiToOEM - одна и та же ошибка (указана выше). Где я неправ?
Суслик (2004-10-01 09:47:00) [8]код давай.
ЗЫ
когда вы все поймете, что разговор без кода не имеет смысла
MBo (2004-10-01 09:46:00) [9]однако память не выделил, скорее всего...
Slonco (2004-10-01 09:34:00) [10]Вот такая ошибка выползает...
Project Alerter.exe raised exception class EAccessViolation with message 'Access violation at address 77E372DC in module 'user32.dll'. Write of address 019048F5'. Process stopped. Use Step or Run to continue.
Пробовал CharToOEM - та же беда :((
MBo (2004-10-01 09:29:00) [11]CharToOem(Buff)
пример в FAQ