CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

不明白为什么会出现access violation 40288xxxx in module 'VCL50.BPL'

楼主huang_2(叽叽喳喳)2003-02-03 15:29:59 在 C++ Builder / 基础类 提问

以下是服务器端的代码,总是在执行到   “Socket->SendText(IntToStr(bmpStream->Size));这句就会出现我题目所说的错误信息,请问是什么原因”  
   
  void   __fastcall   TForm1::ServerSocket1Accept(TObject   *Sender,  
              TCustomWinSocket   *Socket)  
  {  
        Label1->Caption="已经成功和客户端连接";  
  }  
  //---------------------------------------------------------------------------  
   
   
  void   __fastcall   TForm1::ServerSocket1ClientRead(TObject   *Sender,  
              TCustomWinSocket   *Socket)  
  {  
        AnsiString   recText="";  
        recText=Socket->ReceiveText();  
        Net_Snap_Screen(0,0,Screen->Width,Screen->Height);  
        Label6->Caption=recText;  
   
        if(recText=="getImage")  
        {  
              Label2->Caption="收到要求截图的命令";  
              bmpStream=0;  
              Socket->SendText(IntToStr(bmpStream->Size));  
        }  
        if(recText=="ok")  
        {  
              Label3->Caption="开始发送图片文件流";  
              bmpStream->Position=0;  
              Socket->SendStream(bmpStream);  
        }  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormCreate(TObject   *Sender)  
  {  
        ServerSocket1->Active=true;  
        bmpStream=new   TMemoryStream;  
  } 问题点数:20、回复次数:9Top

1 楼cardinalh(天空下的船)回复于 2003-02-03 16:14:24 得分 0

一般说来这种错误都是内存溢出错误,你可以检查一下你在发送的时候相关指针是否都有指向Top

2 楼huang_2(叽叽喳喳)回复于 2003-02-03 16:22:30 得分 0

我全部代码就是这样,好像没有错  
  //---------------------------------------------------------------------------  
  #include   "jpeg.hpp"  
  #include   <vcl.h>  
  #pragma   hdrstop  
   
  #include   "main_server.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TForm1   *Form1;  
   
  void   __fastcall   TForm1::Net_Snap_Screen(int   leftPos,int   topPos,int  
   
  rightPos,int   bottomPos)  
  {  
        int   rectWidth,rectHeight;  
        HDC   sourceDC,destDC,bHandle;  
        Graphics::TBitmap   *bitMap=new   Graphics::TBitmap();  
        rectWidth=rightPos-leftPos;  
        rectHeight=bottomPos-topPos;  
   
        /*以屏幕坐标位置读取源设备*/  
        sourceDC=CreateDC("DISPLAY",NULL,NULL,NULL);  
        destDC=CreateCompatibleDC(sourceDC);  
        bHandle=CreateCompatibleBitmap(sourceDC,rectWidth,rectHeight);  
        SelectObject(destDC,bHandle);  
   
        BitBlt(destDC,0,0,rectWidth,rectHeight,sourceDC,leftPos,topPos,SRCCOPY);  
   
        bitMap->Handle=bHandle;  
        bmpStream->Clear();  
        bitMap->SaveToStream(bmpStream);  
   
        /*   释放资源   */  
   
        delete   bitMap;  
        DeleteDC(destDC);  
        ReleaseDC(bHandle,sourceDC);  
   
        /*保存截取的屏幕*/  
   
        bmpStream->SaveToFile("temp.bmp");  
   
        /*   将bmp转换成.jpg文件   */  
   
        Graphics::TBitmap   *bitMap1=new   Graphics::TBitmap();     //bitMap1是为了读取刚才储存的bmp文件  
        bitMap1->LoadFromFile("temp.bmp");  
        Graphics::TBitmap   *tmpBitmap=new   Graphics::TBitmap();  
   
        tmpBitmap->Width=bitMap1->Width;  
        tmpBitmap->Height=bitMap1->Height;  
   
   
  tmpBitmap->Canvas->StretchDraw(TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),bitMap1);  
   
        TJPEGImage   *jpeg=new   TJPEGImage();  
        jpeg->PixelFormat=jf8Bit;  
        jpeg->CompressionQuality=75;  
        jpeg->Assign((TPersistent   *)tmpBitmap);  
        jpeg->Compress();  
   
        /*   把jpg格式的图像储存在内存流中   */  
   
        bmpStream->Clear();  
        jpeg->SaveToStream(bmpStream);  
        jpeg->SaveToFile("temp.jpg");  
   
        /********     释放资源   ***********/  
   
        delete   jpeg;  
        delete   bitMap1;  
   
  }  
   
  //---------------------------------------------------------------------------  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
        :   TForm(Owner)  
  {  
  }  
  //---------------------------------------------------------------------------  
   
   
  void   __fastcall   TForm1::ServerSocket1Accept(TObject   *Sender,  
              TCustomWinSocket   *Socket)  
  {  
        Label1->Caption="已经成功和客户端连接";  
  }  
  //---------------------------------------------------------------------------  
   
   
  void   __fastcall   TForm1::ServerSocket1ClientRead(TObject   *Sender,  
              TCustomWinSocket   *Socket)  
  {  
        AnsiString   recText="";  
        recText=Socket->ReceiveText();  
        Net_Snap_Screen(0,0,Screen->Width,Screen->Height);  
        Label6->Caption=recText;  
   
        if(recText=="getImage")  
        {  
              Label2->Caption="收到要求截图的命令";  
              bmpStream=0;  
              Socket->SendText(IntToStr(bmpStream->Size));  
        }  
        if(recText=="ok")  
        {  
              Label3->Caption="开始发送图片文件流";  
              bmpStream->Position=0;  
              Socket->SendStream(bmpStream);  
        }  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormCreate(TObject   *Sender)  
  {  
        ServerSocket1->Active=true;  
        bmpStream=new   TMemoryStream;  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
        Close();  
  }  
  //---------------------------------------------------------------------------  
  Top

3 楼huang_2(叽叽喳喳)回复于 2003-02-03 16:23:33 得分 0

还有头文件:  
   
  //---------------------------------------------------------------------------  
   
  #ifndef   main_serverH  
  #define   main_serverH  
  //---------------------------------------------------------------------------  
  #include   <Classes.hpp>  
  #include   <Controls.hpp>  
  #include   <StdCtrls.hpp>  
  #include   <Forms.hpp>  
  #include   <ScktComp.hpp>  
  //---------------------------------------------------------------------------  
  class   TForm1   :   public   TForm  
  {  
  __published: //   IDE-managed   Components  
        TLabel   *Label1;  
        TServerSocket   *ServerSocket1;  
        TLabel   *Label2;  
        TLabel   *Label3;  
        TLabel   *Label4;  
        TLabel   *Label5;  
        TLabel   *Label6;  
        TButton   *Button1;  
        void   __fastcall   ServerSocket1Accept(TObject   *Sender,  
                      TCustomWinSocket   *Socket);  
        void   __fastcall   ServerSocket1ClientRead(TObject   *Sender,  
                      TCustomWinSocket   *Socket);  
        void   __fastcall   FormCreate(TObject   *Sender);  
        void   __fastcall   Button1Click(TObject   *Sender);  
  private: //   User   declarations  
  public: //   User   declarations  
        __fastcall   TForm1(TComponent*   Owner);  
   
  /**********   自定义变量   **************/  
   
        int   photoSize;  
        TMemoryStream   *bmpStream;  
   
  /************************************/  
   
  /*******************************   自定义函数   ****************************/  
   
  void   __fastcall   Net_Snap_Screen(int   leftPos,int   topPos,int   rightPos,int   bottomPos);  
   
  /************************************************************************/  
   
   
  };  
  //---------------------------------------------------------------------------  
  extern   PACKAGE   TForm1   *Form1;  
  //---------------------------------------------------------------------------  
  #endif  
  Top

4 楼huang_2(叽叽喳喳)回复于 2003-02-03 16:42:51 得分 0

看不出哪里错了Top

5 楼matq2008(叶子.net)回复于 2003-02-03 20:40:08 得分 0

Socket->SendText(IntToStr(bmpStream->Size));  
  ---->这一句是服务器端的发送吗?给谁发?Top

6 楼huang_2(叽叽喳喳)回复于 2003-02-03 21:11:08 得分 0

没错,是服务器端发的,我曾经试过改为:  
  ServerSocket1->socket->connections[0]->SendText...............  
   
  的形式,但还是出现我所说的错误,我之所以说是这行出错,是因为我使用断点测试的时候每当运行到这行代码,就会报错,真不知道是什么原因  
   
  Top

7 楼ffww(疯子)回复于 2003-02-03 22:37:42 得分 0

该不会是一个抓对方机器屏幕的程序吧?  
  呵呵。。。。  
  我这里有,Top

8 楼jishiping(JSP 季世平)回复于 2003-02-07 19:58:29 得分 20

---------------------------  
        if(recText=="getImage")  
        {  
              Label2->Caption="收到要求截图的命令";  
              bmpStream=0;     //这儿你已经将bmpStream设为0了  
              Socket->SendText(IntToStr(bmpStream->Size));  
        }  
  ---------------------------  
  你已经将   bmpStream   设为0了,再访问   bmpStream->Size   不出错才怪呢。  
  你这儿应该是bmpStream->Position=0;吧,而不是bmpStream=0;Top

9 楼gaoshan9821(三儿)回复于 2003-02-09 14:46:12 得分 0

不行的话,把窗体重新换一下,效果会很好的Top

相关问题

  • YM“access violation at address xxxx in modul "xx.exe",read of address 0000000?”,
  • DLL & VCL
  • VCL好东东
  • VCL不见了!!!
  • 关于VCL
  • Vcl的烦恼!!!!
  • 寻找VCL
  • vcl的类树!
  • vcl源代码
  • vcl的声明

关键词

  • 屏幕
  • socket
  • null
  • bmpstream
  • destdc
  • rectext
  • sourcedc
  • bhandle
  • leftpos
  • rectheight

得分解答快速导航

  • 帖主:huang_2
  • jishiping

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo