CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

大家帮看看那错了~血都改出来了

楼主rinoe(渡渡鸟)2005-04-03 18:39:26 在 VC/MFC / 图形处理/算法 提问

一运行就说会出错~~~~~~  
  郁闷到了  
   
   
  directx.h  
   
   
   
   
  ///////////////////////////////////////////////////////////////////////////  
  const   int     SCREEN_WIDTH     =640   ;  
  const   int     SCREEN_HEIGHT   =480   ;  
  ///////////////////////////////////////////////////////////////////////////  
  LPDIRECTDRAW7                   lpdd                   =   NULL;    
  LPDIRECTDRAWSURFACE7     lpddsprimary   =   NULL;  
  LPDIRECTDRAWPALETTE       lpddpal             =   NULL;  
  DDSURFACEDESC2                 ddsd;    
  PALETTEENTRY                     palette[256];      
  ///////////////////////////////////////////////////////////////////////////  
  class   DirectX  
  {  
  public:  
  // DirectX(void);  
  bool   game_start();  
  bool   game_main();  
  };  
   
   
  bool   DirectX::game_start()  
  {  
  //设置dx接口  
  if   (FAILED(DirectDrawCreateEx(NULL,   (void   **)&lpdd,   IID_IDirectDraw7,   NULL)))  
  {  
  return(1);  
  }  
  //设置windows的协作模式  
  lpdd->SetCooperativeLevel(NULL,   DDSCL_NORMAL);  
  //设置显示模式  
  lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,8,0,0);  
  return(0);  
  //创建一个显示主表面  
  memset(&ddsd,0,sizeof(ddsd));  
  ddsd.dwSize                   =sizeof(ddsd);  
  ddsd.dwFlags                 =DDSD_CAPS;  
  ddsd.ddsCaps.dwCaps   =DDSCAPS_PRIMARYSURFACE;  
        if   (FAILED(lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL)))  
        {  
   
                      return(1);  
  }  
  //设置绘图板  
  for(int   color   =1;color<255;color++)  
  {  
  palette[color].peRed       =rand()&256;  
  palette[color].peGreen   =rand()&256;  
  palette[color].peBlue     =rand()&256;  
   
  palette[color].peFlags   =PC_NOCOLLAPSE;  
  }  
           
          palette[0].peRed       =0;  
  palette[0].peGreen   =0;  
  palette[0].peBlue     =0;  
                  palette[0].peFlags   =PC_NOCOLLAPSE;  
   
  palette[255].peRed       =255;  
  palette[255].peGreen   =255;  
  palette[255].peBlue     =255;  
                  palette[255].peFlags   =PC_NOCOLLAPSE;  
   
  if   (FAILED(lpdd->CreatePalette(DDPCAPS_8BIT   |   DDPCAPS_ALLOW256   |   DDPCAPS_INITIALIZE,   palette,&lpddpal,   NULL)))  
  {  
   
                      return(1);  
  }  
   
          if   (FAILED(lpddsprimary->SetPalette(lpddpal)))  
          {  
                        return(1);  
          }    
           
  }  
   
  bool   DirectX::game_main()  
  {  
   
    memset(&ddsd,0,sizeof(ddsd));  
    ddsd.dwSize=sizeof(ddsd);    
    if   (FAILED(lpddsprimary->Lock(NULL,   &ddsd,DDLOCK_SURFACEMEMORYPTR   |   DDLOCK_WAIT,NULL)))  
        {  
          return(1);  
        }    
   
        if   (FAILED(lpddsprimary->Unlock(NULL)))  
        {  
        return(1);  
        }  
  return(1);  
   
  }  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  win32.cpp  
   
   
  #define   WIN32_LEAN_ANP_MEAN       //不使用mfc编译  
   
  #pragma   comment(lib,"dxguid.lib")  
  #pragma   comment(lib,"ddraw.lib")  
  #pragma   comment(lib,"dxerr8.lib")  
  #pragma   comment(lib,"winmm.lib")  
   
  #define   INITGUID   //   make   sure   directX   guids   are   included  
   
  #include   <windows.h>       //   include   important   windows   stuff  
  #include   <windowsx.h>    
  #include   <mmsystem.h>  
  #include   <iostream.h>   //   include   important   C/C++   stuff  
  #include   <conio.h>  
  #include   <stdlib.h>  
  #include   <malloc.h>  
  #include   <memory.h>  
  #include   <string.h>  
  #include   <stdarg.h>  
  #include   <stdio.h>    
  #include   <math.h>  
  #include   <io.h>  
  #include   <fcntl.h>  
   
  #include   <ddraw.h>    
  #include"resource.h"  
  #include"directx.h"  
  ////////////////////////////////////////////////////////////////////////////////////  
  //定义常量  
  #define   windows_name   "exp"  
   
  //消息循环  
  LRESULT   CALLBACK   WindowProc(HWND   hwnd,UINT   msg,WPARAM   wparam,LPARAM   lparam)  
  {  
  PAINTSTRUCT   ps;  
  HDC                   hdc;  
   
   
  switch(msg)  
  {  
  case   WM_CREATE:  
  {  
  return   0;  
  }  
  break;  
   
  case   WM_PAINT:  
  {  
  hdc   =BeginPaint(hwnd,&ps);  
  EndPaint(hwnd,&ps);  
   
   
  return   0;  
  }  
  break;  
   
  case   WM_DESTROY:  
  {  
  PostQuitMessage(0);  
  return   0;  
  }  
  break;  
  case   WM_KEYDOWN:  
  switch(   wparam   )  
  {  
  case   VK_ESCAPE:  
  PostMessage(hwnd,   WM_CLOSE,   0,   0);  
  break;  
  }  
  break;  
  default:break;  
  }  
   
  return   (DefWindowProc(hwnd,msg,wparam,lparam));  
  }  
   
   
  int   WINAPI   WinMain(HINSTANCE   hinstance,HINSTANCE   hprevinstance,LPSTR   lpcmdline,int   ncmdshow)  
  {  
  WNDCLASSEX   wc;  
  HWND               hwnd;  
  MSG                 msg;  
           
  DirectX   DX;  
   
          wc.cbSize                     =sizeof(WNDCLASSEX);  
  wc.style                       =CS_DBLCLKS   |   CS_OWNDC   |   CS_HREDRAW   |   CS_VREDRAW;  
  wc.lpfnWndProc           =WindowProc;  
  wc.cbClsExtra             =0;  
  wc.cbWndExtra             =0;  
  wc.hInstance               =hinstance;  
  wc.hIcon                       =LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON1));  
  wc.hCursor                   =LoadCursor(hinstance,IDC_ARROW);  
  wc.hbrBackground       =(HBRUSH)GetStockObject(BLACK_BRUSH);  
  wc.lpszMenuName         =NULL;  
  wc.lpszClassName       =windows_name;  
  wc.hIconSm                   =LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON2));  
   
   
  if(!RegisterClassEx(&wc))  
  return   0;  
   
           
  if(!(hwnd   =   CreateWindowEx(  
                                                NULL,  
        windows_name,  
        "exp!",  
        WS_POPUP   |   WS_VISIBLE,  
        0,  
        0,  
        GetSystemMetrics(SM_CXSCREEN),  
        GetSystemMetrics(SM_CYSCREEN),    
        NULL,  
        NULL,  
                hinstance,  
        NULL)))  
        return   0;  
          DX.game_start();  
   
  while(TRUE)  
  {  
           
  if   (PeekMessage(&msg,NULL,0,0,PM_REMOVE))  
        {    
         
                if   (msg.message   ==   WM_QUIT)  
                        break;        
        TranslateMessage(&msg);  
        DispatchMessage(&msg);  
        }    
           
               
      DX.game_main();  
                 
  }    
   
  return(msg.wParam);  
  }  
   
   
   
   
  问题点数:100、回复次数:10Top

1 楼rinoe(渡渡鸟)回复于 2005-04-04 08:42:11 得分 0

怎么就没有人帮助一下我了~  
   
  郁闷啊~Top

2 楼I_Love_CPP(Never stop!)回复于 2005-04-04 21:35:41 得分 0

报告啥子错嘛?  
   
  难得一行一行看代码了   :(Top

3 楼xindao_wang(山中客)回复于 2005-04-04 21:46:56 得分 0

是啊,把出错信息贴出来看看Top

4 楼krh2001(边城浪子)回复于 2005-04-04 21:54:23 得分 0

这么长啊Top

5 楼rinoe(渡渡鸟)回复于 2005-04-05 09:23:49 得分 0

报告的是:  
   
  "0x0040bdff"   指令引用的"0x00000000"内存,该内存不能为"read"  
   
   
  要终止程序       请点击“确认”  
  要调试程序       请点击“取消”  
   
   
  代码在:  
  http://m229.mail.163.com/coremail/fcg/ldmsapp/Direct2D.rar?lettsid=kAslpAFHyQQAOItO&mid=1tbiQBN6bEHTxc34aAAEsL%250A64%250A8388762%250A1&funcid=readpart&part=3&filename=Direct2D.rar&download=1Top

6 楼MuseIn(air supply * 学好Linux)回复于 2005-04-05 09:56:41 得分 20

指针问题:指针没有正确初始化或者付值,   跟踪看看你的指针.Top

7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-05 10:18:23 得分 20

指针操作错误  
  楼主应该设置一下断点,单步调试一下Top

8 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-04-05 13:16:47 得分 20

原因:lpddsprimary没初始化  
  lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,8,0,0);  
  注销到这一行 return(0);  
   
  Top

9 楼daienming(键盘上的蛤蟆)回复于 2005-04-05 13:36:17 得分 20

应该是指针的问题了,单步跟踪!Top

10 楼xindao_wang(山中客)回复于 2005-04-06 20:53:56 得分 20

对,应该是指针问题,可能没有初始化就使用了Top

相关问题

  • 帮忙改错!
  • 帮忙改错!!!
  • 帮忙改错
  • 请帮忙改错!
  • 请帮忙改错
  • 请帮忙改错
  • 帮忙改个错
  • 改错,帮忙呀!
  • 请大家帮忙改错
  • 高手帮忙改错啊!!!!!!!!

关键词

  • win32
  • 指针
  • directx
  • ps
  • game
  • null
  • lpdd
  • ddsd
  • wc
  • 初始化

得分解答快速导航

  • 帖主:rinoe
  • MuseIn
  • oyljerry
  • vcmute
  • daienming
  • xindao_wang

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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