Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

Access Violation и функция move   Найти похожие ветки 

 
ZedeS ©   (2005-05-24 16:04) [0]

Доброго времени суток!
Пишу програмулину для роботы по Telnet. Использую компонент Indy Telnet Client (IdTelnet).  У него процедура SendChr. Мне надо передать заранее подготовленную строку s. Я ее загоняю в массив st: array of char; при помощи функции move. Вот она, по-моему, и генерит сообщение Access Violation.
 Каким другим спосбом можно пропихнуть заданную строку (s:string;) через Telnet.
Ниже листинг программы.
Заранне благодарю за советы.

На форме: Button1, Memo1, UdTelnet1.

Это сообщение:
Project XXXX raised exception class EAccessViolation with message
"Access violation at adress 00000000. Read address 0000000".
Process stoped...  

Вместо нулей при други раскладах - другие адреса.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
 IdTelnet, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   IdTelnet1: TIdTelnet;
   procedure IdTelnet1DataAvailable(Buffer: String);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
// взято из Кулибы - это такой замечательный зборник советовprocedure Delay(ms : longint);
var
T : LongInt;
begin
T := GetTickCount + ms;

while GetTickCount < T do
Application.ProcessMessages;
end;

//взято из стандартного примера в комлекте с Делфямиprocedure TForm1.IdTelnet1DataAvailable(Buffer: String);
{This routine comes directly from the ICS TNDEMO code. Thanks to Francois Piette
It updates the memo control when we get data}
const
 CR = #13;
 LF = #10;
var
 Start, Stop: Integer;
begin
 if Memo1.Lines.Count = 0 then
   Memo1.Lines.Add("");

 Start := 1;
 Stop := Pos(CR, Buffer);
 if Stop = 0 then
   Stop := Length(Buffer) + 1;
 while Start <= Length(Buffer) do
 begin
   Memo1.Lines.Strings[Memo1.Lines.Count - 1] :=
     Memo1.Lines.Strings[Memo1.Lines.Count - 1] +
     Copy(Buffer, Start, Stop - Start);
   if Buffer[Stop] = CR then
   begin
     Memo1.Lines.Add("");
{$IFNDEF Linux}
     SendMessage(Memo1.Handle, WM_KEYDOWN, VK_UP, 1);
{$ENDIF}
   end;
   Start := Stop + 1;
   if Start > Length(Buffer) then
     Break;
   if Buffer[Start] = LF then
     Start := Start + 1;
   Stop := Start;
   while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
     Stop := Stop + 1;
 end;
end;

// а вот здесь нужно искать багу
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
b,q,i:integer;
st: array of char;
begin
b:=1;
s:="ZEQO:BTS="+IntToStr(b)+";`ZEQO:BTS="+IntToStr(b+1)+";`ZEQO:BTS="+IntToStr(b+2)+";`ZERO:BCF="+IntToStr(b)+";`ZDTI:::P CM=45;`ZESI:ID="+IntToStr(b)+";`";
b:= Length(s);    
SetLength(st,b);
move(s,st,b); // если это забанить то все неработает :) нормально
q:=0;
IdTelnet1.Connect;
for i:=1 to 8 do
begin
while st[q]<>"`" do
               begin
               Form1.IDTelnet1.SendCh(st[q]);
               inc(q);
               end;
       Form1.IDTelnet1.SendCh(#13);
       inc(q);
       Delay(200);
end;
IdTelnet1.Disconnect;
end;

end.


 
Digitman ©   (2005-05-24 16:08) [1]


> Мне надо передать заранее подготовленную строку s. Я ее
> загоняю в массив st: array of char


и кто тебя, сироту, заставил это делать, что-то тамс куда-то там "загонять" ?)


 
Slym ©   (2005-05-25 05:31) [2]

А так не работает?

procedure TForm1.Button1Click(Sender: TObject);
begin
IdTelnet1.Connect;
IdTelnet1.WriteLn("ZEQO:BTS=1;");
IdTelnet1.WriteLn("ZEQO:BTS=2;");
IdTelnet1.WriteLn("ZERO:BCF=1;");
IdTelnet1.WriteLn("ZEQO:BTS=3;");
IdTelnet1.WriteLn("ZDTI:::PCM=45;");
IdTelnet1.WriteLn("ZESI:ID=1;");
IdTelnet1.Disconnect;
end;



Страницы: 1 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
1-1124659140
domosed
2005-08-22 01:19
2005.09.11
не допустить чтобы два приложения одновременно запис. и читали фа


3-1122924727
CCCP
2005-08-01 23:32
2005.09.11
Помогите с запросом


3-1122469503
Yana
2005-07-27 17:05
2005.09.11
Получить список таблиц User-а


14-1124265108
Igorek
2005-08-17 11:51
2005.09.11
Научите меня пользоваться программой explorer.exe


14-1124015959
TUser
2005-08-14 14:39
2005.09.11
Телевон с большими буквами