0

こんにちは、このコードでサーバーからストリームを読み込もうとしました

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{
   //TMemoryStream *TMS = new TMemoryStream;
   TStringStream *TSS = new TStringStream;
   AnsiString A,B;
   TStream *TS;
   INT64 Len;
   try
   {
       if (Key == VK_RETURN)
       {
          Beep(0,0);
          if(Edit1->Text == "mystream")
           {
               TCPClient1->IOHandler->WriteLn("mystream");
               Len = StrToInt(TCPClient1->IOHandler->ReadLn());
               TCPClient1->IOHandler->ReadStream(TS,Len,false);
               TSS->CopyFrom(TS,0);
               RichEdit1->Lines->Text = TSS->DataString;
               Edit1->Clear();
           }
       else
           {
              TCPClient1->IOHandler->WriteLn(Edit1->Text);
              A = TCPClient1->IOHandler->ReadLn();
              RichEdit1->Lines->Add(A);
              Edit1->Clear();
           }
       }
   }
   __finally
   {
       TSS->Free();
   }

}

クライアントがサーバーからストリームを読み取ろうとするたびに、コンパイラは言います。

First chance exception at $75D89617. Exception class EAccessViolation with message 'Access violation at address 500682B3 in module 'rtl140.bpl'. Read of address 00000018'. Process Project1.exe (6056)

これをどのように処理しますか?

4

1 に答える 1

3

TStreamを呼び出す前にオブジェクトをインスタンス化していないReadStream()TS変数は完全に初期化されていません 。ReadStream()オブジェクトを作成するのではなくTStream、書き込むだけなので、TStream事前に自分で作成する必要があります。

示したコードがあれば、代わりに次のメソッドTStreamを使用して完全に置き換えることができます。ReadString()

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key) 
{ 
    if (Key == VK_RETURN) 
    { 
        Beep(0,0); 
        if (Edit1->Text == "mystream") 
        { 
            TCPClient1->IOHandler->WriteLn("mystream"); 
            int Len = StrToInt(TCPClient1->IOHandler->ReadLn()); 
            RichEdit1->Lines->Text = TCPClient1->IOHandler->ReadString(Len); 
        } 
        else 
        { 
            TCPClient1->IOHandler->WriteLn(Edit1->Text); 
            String A = TCPClient1->IOHandler->ReadLn(); 
            RichEdit1->Lines->Add(A); 
        } 
        Edit1->Clear(); 
    } 
} 
于 2012-06-01T00:29:03.073 に答える