这个很难说,在使用函数时要注意Pchar的用法!

解决方案 »

  1.   

    如果是定义在类里面的(比如TForm的public里的),要先创建类的实例: oXx = TXx.Create(nil);
     oxx.xxfunc()
      

  2.   

    原代码如下:在执行LOGINSMS时出错。
    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ScktComp, StdCtrls;
    CONST
      PORT=2222;
      IPADDRESS='';
      USER='';
      PASS='';
    type
      TForm1 = class(TForm)
        ClientSocket1: TClientSocket;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function readsocket():boolean;
        procedure creattcp();
        function  loginsms():boolean;
     //   function sendcontent():boolean;
      //  function closetcp():boolean;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.creattcp();
    begin
      clientsocket1.Port:=2222;
      clientsocket1.Address:=IPADDRESS;
      clientsocket1.Active :=true;
    end;
    function TForm1.readsocket():boolean;
    var count,len:integer;
        recvbyte:string;
    begin
        count:=0;
        len:=1024;
        recvbyte:=clientsocket1.Socket.ReceiveText ;
        len:=ord(recvbyte[3]);
        if recvbyte[11]<>chr(0) then result:=false;
        count:=length(recvbyte);
        if count=len then result:=true
        else result:=false;
    end;
    function TForm1.loginsms ():boolean;
    var sendbyte,tmpbyte:string;
       sendlen,tmplen,pos:integer;
    begin
      sendbyte[7]:= chr(1);
      sendbyte[15]:=chr(1);
      sendlen:=16;
      tmpbyte:=USER;
      tmplen:=length(tmpbyte);
      for pos:=0 to tmplen-1 do
      begin
        sendbyte[sendlen]:=tmpbyte[pos];
        sendlen:=sendlen+1;
      end;
      sendlen:=sendlen+1;
      tmpbyte:=PASS;
      tmplen:=length(tmpbyte);
      for pos:=0 to tmplen-1 do
      begin
        sendbyte[sendlen]:=tmpbyte[pos];
        sendlen:=sendlen+1;
      end;
      sendlen:=sendlen+2;
      sendbyte[sendlen]:=chr(1);
      sendlen:=sendlen+14;
      sendbyte[3]:=chr(sendlen);
      clientsocket1.socket.sendtext(sendbyte);
      if (not readsocket()) then showmessage('error')
     else showmessage('ok');
    end;
    procedure TForm1.Button1Click(Sender: TObject);
       var sendbyte,tmpbyte:string;
           sendlen,tmplen,pos:integer;
    begin creattcp();
     if loginsms() then
      showmessage('ok')
     //else showmessage('error!')
     // else showmessage('eeeee');
    end;end
      

  3.   

    应该是SENDBYTE没赋值所以 sendbyte[7]:= chr(1); 这行就应该报错吧
      

  4.   

    setLength(Sendbyte,100); 不知道是否可行。
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  5.   

    SetLength(s,10);
      S[7] :=chr(1);ok ..
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]