Главная страница
    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.01 c
1-1124236886
rosl
2005-08-17 04:01
2005.09.11
XML


4-1122099193
***_Diman_***
2005-07-23 10:13
2005.09.11
как отловить DTN_CLOSEUP?


4-1122112344
Vir
2005-07-23 13:52
2005.09.11
Hardware ID


4-1122138012
KSergey
2005-07-23 21:00
2005.09.11
Как запустить программу с правами system...


14-1124122766
Andy BitOff
2005-08-15 20:19
2005.09.11
Как узнать что это за адреса?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский