游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2825|回复: 6

求助:ddraw的定义放在该类里为什么连接不上缓冲区?

[复制链接]

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2005-4-24 10:58:00 | 显示全部楼层 |阅读模式
ddraw的定义放在该类里为什么连接不上缓冲区?反而放在全局里面可以。不过放在全局里面有时候编译会出现重定义的错误。我觉得应该在类里面定义才对的,可编译一点错都没有,就是运行时连接不上缓冲区了,为什么???? [em20] [em20] [em20] [em21] [em21]

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2005-4-24 11:01:00 | 显示全部楼层

ddraw的定义放在该类里为什么连接不上缓冲区?

放在全局定义的错误:
Linking...
canvasFrame.obj : error LNK2005: "long result" (?result@@3JA) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDrawSurface7 * pPSur" (?pPSur@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDraw7 * pDD7" (?pDD7@@3PAUIDirectDraw7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDrawSurface7 * pBBuf" (?pBBuf@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct _DDSURFACEDESC2 desc" (?desc@@3U_DDSURFACEDESC2@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDrawSurface7 * * pOPWo" (?pOPWo@@3PAPAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDrawSurface7 * * pOPYb" (?pOPYb@@3PAPAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDrawSurface7 * DXSBack1" (?DXSBack1@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDrawSurface7 * DXSBack0" (?DXSBack0@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct _DDSCAPS2 caps" (?caps@@3U_DDSCAPS2@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct IDirectDrawSurface7 * DXSBack" (?DXSBack@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "struct _DDCOLORKEY key" (?key@@3U_DDCOLORKEY@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "long result" (?result@@3JA) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDrawSurface7 * pPSur" (?pPSur@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDraw7 * pDD7" (?pDD7@@3PAUIDirectDraw7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDrawSurface7 * pBBuf" (?pBBuf@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct _DDSURFACEDESC2 desc" (?desc@@3U_DDSURFACEDESC2@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDrawSurface7 * * pOPWo" (?pOPWo@@3PAPAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDrawSurface7 * * pOPYb" (?pOPYb@@3PAPAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDrawSurface7 * DXSBack1" (?DXSBack1@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDrawSurface7 * DXSBack0" (?DXSBack0@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct _DDSCAPS2 caps" (?caps@@3U_DDSCAPS2@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct IDirectDrawSurface7 * DXSBack" (?DXSBack@@3PAUIDirectDrawSurface7@@A) already defined in canvasApp.obj
game.obj : error LNK2005: "struct _DDCOLORKEY key" (?key@@3U_DDCOLORKEY@@A) already defined in canvasApp.obj
Release/canvas.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

canvas.exe - 25 error(s), 0 warning(s)

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2005-4-24 11:07:00 | 显示全部楼层

Re:求助:ddraw的定义放在该类里为什么连接不上缓冲区?

对了,附上程序:
定义:
HDC hdc,hdc1;
        HBITMAP bitmap;
        LPDIRECTDRAWSURFACE7    pPSur; //定义主绘图页
        LPDIRECTDRAWSURFACE7    pBBuf; //定义后缓冲区
        LPDIRECTDRAWSURFACE7        pOPWo[7];//陈真的暂存图面
        LPDIRECTDRAWSURFACE7        pOPYb[7];//日本的暂存图面//定义颜色键
        LPDIRECTDRAWSURFACE7        DXSBack1;        //主缓存页面1
        LPDIRECTDRAWSURFACE7        DXSBack0;        //背景地图缓存页面0
        LPDIRECTDRAWSURFACE7        DXSBack;        //地图移动缓存页面0
        LPDIRECTDRAW7           pDD7;  //定义DirectDraw对象       
        DDSCAPS2                        caps;             //定义DDSCAPS结构
        DDSURFACEDESC2          desc;  //定义描述结构
        HRESULT                result;                   //定义HRESULT类型变量
        DDCOLORKEY        key;

程序:
result = DirectDrawCreateEx(NULL, (VOID**)&pDD7, IID_IDirectDraw7, NULL);
        //建立DirectDraw对象
    if (result != DD_OK)
                MessageBox("建立DirectDraw对象失败!");
        result = pDD7->SetCooperativeLevel(m_hWnd,DDSCL_EXCLUSIVE |
                                 DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT);
        //设定协调等级
        if(result !=DD_OK)
                MessageBox("设定程序协调等级失败!");
        result = pDD7->SetDisplayMode(640,480,16,0,DDSDM_STANDARDVGAMODE);  //设定显示模式
        if(result !=DD_OK)
                MessageBox("设定屏幕显示模式失败!");
        //==============================================================================
        memset(&desc,0,sizeof(desc));      
        desc.dwSize = sizeof(desc);           
        desc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
        desc.dwBackBufferCount = 1;        
        desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
        result = pDD7->CreateSurface(&desc,&pPSur,NULL);
        //建立主绘图页
        if(result != DD_OK)
                 MessageBox("建立主绘图页失败!");
        caps.dwCaps = DDSCAPS_BACKBUFFER;  
        result = pPSur->GetAttachedSurface(&caps,&pBBuf);
        //连结后缓冲区
        if(result !=DD_OK)
                MessageBox("连接后缓冲区失败!");

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2005-4-24 11:09:00 | 显示全部楼层

Re:求助:ddraw的定义放在该类里为什么连接不上缓冲区?

对了,附上程序:
定义:
HDC hdc,hdc1;
        HBITMAP bitmap;
        LPDIRECTDRAWSURFACE7    pPSur; //
        LPDIRECTDRAWSURFACE7    pBBuf; //定义后缓冲区
        LPDIRECTDRAWSURFACE7        pOPWo[7];//
        LPDIRECTDRAWSURFACE7        pOPYb[7];//
        LPDIRECTDRAWSURFACE7        DXSBack1;        //
        LPDIRECTDRAWSURFACE7        DXSBack0;        //背景地图缓存页面0
        LPDIRECTDRAWSURFACE7        DXSBack;        //地图移动缓存页面0
        LPDIRECTDRAW7           pDD7;  //定义DirectDraw对象       
        DDSCAPS2                        caps;             //定义DDSCAPS结构
        DDSURFACEDESC2          desc;  //定义描述结构
        HRESULT                result;                   //定义HRESULT类型变量
        DDCOLORKEY        key;

程序:
result = DirectDrawCreateEx(NULL, (VOID**)&pDD7, IID_IDirectDraw7, NULL);
        //建立DirectDraw对象
    if (result != DD_OK)
                MessageBox("建立DirectDraw对象失败!");
        result = pDD7->SetCooperativeLevel(m_hWnd,DDSCL_EXCLUSIVE |
                                 DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT);
        //设定协调等级
        if(result !=DD_OK)
                MessageBox("设定程序协调等级失败!");
        result = pDD7->SetDisplayMode(640,480,16,0,DDSDM_STANDARDVGAMODE);  //设定显示模式
        if(result !=DD_OK)
                MessageBox("设定屏幕显示模式失败!");
        //==============================================================================
        memset(&desc,0,sizeof(desc));      
        desc.dwSize = sizeof(desc);           
        desc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
        desc.dwBackBufferCount = 1;        
        desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
        result = pDD7->CreateSurface(&desc,&pPSur,NULL);
        //建立主绘图页
        if(result != DD_OK)
                 MessageBox("建立主绘图页失败!");
        caps.dwCaps = DDSCAPS_BACKBUFFER;  
        result = pPSur->GetAttachedSurface(&caps,&pBBuf);
        //连结后缓冲区
        if(result !=DD_OK)
                MessageBox("连接后缓冲区失败!");

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-4-25 12:34:00 | 显示全部楼层

Re:求助:ddraw的定义放在该类里为什么连接不上缓冲区?

你的程序编译Linking的时候没有通过,检查一下Include了哪些文件,包含的文件有没有重复定义的符号

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2005-4-26 09:58:00 | 显示全部楼层

Re:求助:ddraw的定义放在该类里为什么连接不上缓冲区?

好的,谢谢!但是,这些错误都是把定义放到全局里才有,如果放在类里面,是可以通过的。运行的时候就连不上缓冲区了。

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2009-12-10 13:33:00 | 显示全部楼层

Re:求助:ddraw的定义放在该类里为什么连接不上缓冲区?

来晚了点 ^_^!

//建立主绘图页
if(result != DD_OK)
MessageBox("建立主绘图页失败!");
caps.dwCaps = DDSCAPS_BACKBUFFER;  
result = pPSur->GetAttachedSurface(&caps,&pBBuf);
//连结后缓冲区
if(result !=DD_OK)
MessageBox("连接后缓冲区失败!");

以上是你的部分代码,我给你修正一下,就没问题了。
需要修正的地方:
caps.dwCaps = DDSCAPS_BACKBUFFER;  
result = pPSur->GetAttachedSurface(&caps,&pBBuf);

修正为:
desc.ddsCaps.dwCaps =  DDSCAPS_BACKBUFFER;
result = pPSur->GetAttachedSurface(&desc.ddsCaps,&pBBuf);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-18 00:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表