首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

EAccessviolation 异常 ()

2012-03-02 
EAccessviolation 错误()unitUnit1interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,C

EAccessviolation 错误 ()
unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,winsock2,   StdCtrls;

type
    TForm1   =   class(TForm)
        Edit1:   TEdit;
        Memo1:   TMemo;
        Button1:   TButton;
        procedure   FormCreate(Sender:   TObject);
        procedure   Button1Click(Sender:   TObject);
    private
        {   Private   declarations   }
    public
        {   Public   declarations   }
    end;
const   bufsize=1024;
var
    Form1:   TForm1;
    wd:Twsadata;
    server:Tsocket;
    ca:TsockADDrIn;
    ip:pchar;
    port:integer;
    buf:array[0..bufsize]of   string;
    flag:boolean;

implementation

{$R   *.dfm}
uses   unit2;
var   T1:Trecv;
procedure   TForm1.FormCreate(Sender:   TObject);
begin
flag:=false;
if   WSAStartup($0101,wd) <> 0   then   exit;
server:=socket(pf_inet,sock_stream,ipproto_ip);
if   server=invalid_socket   then   exit;
port:=1304;
ip:= '127.0.0.1 ';
ca.sin_family   :=pf_inet;
ca.sin_port       :=htons(port);
ca.sin_addr.S_addr:=inet_addr(ip);
if   connect(server,   @ca   ,sizeof(ca)) <> 0   then
exit
else   flag:=true;

end;

procedure   TForm1.Button1Click(Sender:   TObject);
var   buf:array[0..1]   of   string;
begin
if   flag   then
    begin

    T1:=Trecv.create(true);
    T1.memo2:=memo1;
    T1.Resume;

    //Trecv.create(false);
    buf[0]:=edit1.text;
    send(server,buf,sizeof(buf)+1,0);
  //   memo1.Lines.Add( 'wo: '+buf[0]);
    end
else
    showmessage( 'Please   connect!!! ');
end;

end.
///////////////////////////////////////////////////////////
unit   Unit2;

interface

uses
    Classes,unit1,StdCtrls,winsock2;

type
    Trecv   =   class(TThread)
    private
        {   Private   declarations   }
        rebuf:array[0..1]of   string;
    protected
        procedure   Execute;   override;
        procedure   Addmesg;
    public
        memo2:Tmemo;
        constructor   create(suspends:boolean);

    end;

implementation
procedure   Trecv.Addmesg;
    begin
    memo2.Lines.Add(rebuf[0])
    end;
constructor   Trecv.create(suspends:boolean);
      begin
      inherited   create(suspends);
      end;

{   Important:   Methods   and   properties   of   objects   in   visual   components   can   only   be


    used   in   a   method   called   using   Synchronize,   for   example,

            Synchronize(UpdateCaption);

    and   UpdateCaption   could   look   like,

        procedure   Trecv.UpdateCaption;
        begin
            Form1.Caption   :=   'Updated   in   a   thread ';
        end;   }

{   Trecv   }

procedure   Trecv.Execute;
begin
    {   Place   thread   code   here   }
    while   flag   do
    begin
    recv(server,rebuf,sizeof(rebuf),0);
    //form1.Memo1.Lines.Add(rebuf[0]);
    synchronize(Addmesg);
    end;
end;

end.


老提示EAccessviolation   错误     不知道是哪里的问题


[解决办法]
变量未初始化,访问越界,访问未成功创建的变量,就会出现这个错误。
[解决办法]
一般都用的indy组件,如果不用,你找点C++写的winsock,就知道怎么写了
delphi的winsock程序除了一点点语法不一样外,调用的函数名,参数这些都是一样的。

热点排行