Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
3-1122653317
HepB
2005-07-29 20:08
2005.09.11
Способ для хранения массива в поле...


10-1101905039
grigory
2004-12-01 15:43
2005.09.11
Как правильно получить доступ к св-ву GetProp?


14-1124382467
Kerk
2005-08-18 20:27
2005.09.11
Боржоми


2-1123234603
Bagdat
2005-08-05 13:36
2005.09.11
Создание папок


1-1124352482
cvg
2005-08-18 12:08
2005.09.11
Ошибка при вызове DivMod





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский