游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7077|回复: 16

声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

[复制链接]

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-7-25 16:20:00 | 显示全部楼层 |阅读模式
声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

dxguid.lib dinput8.lib 已经设置好了,<dinput.h>也添加了。

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-7-25 19:30:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

#define INITGUID

到底是什么错啊?

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2006-7-25 20:37:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

错误信息:
Compiling...
hwb.cpp
F:\3d\1\hwb.cpp(13) : error C2146: syntax error : missing ';' before identifier 'didxzz'
F:\3d\1\hwb.cpp(13) : error C2501: 'LPDIRECTINPUT8' : missing storage-class or type specifiers
F:\3d\1\hwb.cpp(13) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

hwb.exe - 3 error(s), 0 warning(s)

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-7-25 20:57:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

不会是这样写吧?

#include <dinput.h>
#include "StdAfx.h"

LPDIRECTINPUT8 didxzz = NULL;

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2006-7-25 21:25:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

不能打开#include "StdAfx.h"这个头文件。

补充说明一下,书中的例子也是一样的情况,错误信息也一样。

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-7-25 21:29:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

[em10]你没有那个文件的话当然打开不了,不如发代码来看看。

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2006-7-25 23:03:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

#include <d3dx9.h>
#include <d3d9.h>
#include <d3dx9math.h>
//#include <dinput.h>
//#include <windows.h>
//#include <winuser.h>
//--------------------------------------------------------------------------
LPDIRECT3D9    dxdxzz = NULL;                                 // Direct3D对象指针
LPDIRECT3DDEVICE9  dxsbzz = NULL;         // Direct3D设备指针
LPDIRECT3DVERTEXBUFFER9 ddhcq1  = NULL;// 顶点缓冲区指针
LPDIRECT3DVERTEXBUFFER9 ddhcq2=0;
LPDIRECT3DINDEXBUFFER9 syhcq1=0;//索引缓冲区
//LPDIRECTINPUT8 didxzz = NULL;//IDirectInput对象指针
//LPDIRECT3DTEXTURE9      wldxzz   = NULL;//纹理对象指针
LPDIRECT3DVERTEXDECLARATION9 ddsmdx;//顶点声明对象。
IDirect3DVertexShader9* ddxrhs=0;//顶点渲染函数。
IDirect3DVertexShader9* ddxrhs2=0;
IDirect3DPixelShader9 *xsxrhs=NULL;//像素渲染函数。
IDirect3DPixelShader9 *xsxrhs2=0;
HWND ckjb;//定义窗口句柄。
//-----------------------------------------------------------------------------函数声明。
LRESULT WINAPI  chuangkouguocheng(HWND ckjb, UINT msg, WPARAM wParam, LPARAM lParam);
void huitu();//绘图。
void shifangziyuan();//释放资源。
//void zuobiaozhuanhuan();//坐标转换。
//void guangzhao();//光照。
void chushihuadx();//初始化dx。
void xuanran();//渲染。
void zbzh();//坐标转换。
//-----------------------------------------------------------------------------变量声明。
float x=1.0f,y=3.0f,z=5.0f,xjd=0,yjd=0,zjd=0;
//D3DXMATRIXA16 dimianjz;//地面矩阵
//-----------------------------------------------------------------------------数组声明。
float a1[19]={0.0f,3.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,-10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f                        ,90.0f,1.0f,1.0f,100.0f};
float a[19];
//-----------------------------------------------------------------------------定义结构体。
struct ddjg
{
D3DXVECTOR3 x;
D3DXVECTOR3 y;
};

//-----------------------------------------------------------------------------入口函数。
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
        WNDCLASS chuangkoulei;//定义窗口类。
//窗口风格,P671。
    chuangkoulei.style=0;//CS_HREDRAW | CS_VREDRAW;
//指向窗口过程。
    chuangkoulei.lpfnWndProc=chuangkouguocheng;
//指定紧随WNDCLASS数据结构后分配的字节数,系统将起初始化为0。
    chuangkoulei.cbClsExtra=0;
//指定紧随窗口实例之后分配的字节数,系统将起初始化为0。P671
    chuangkoulei.cbWndExtra=0;
//标识了该窗口类的窗口过程所在的模块实例的句柄,不能为NULL。
    chuangkoulei.hInstance=hInstance;
//标识了该窗口类的图标。P672
    chuangkoulei.hIcon=LoadIcon(NULL,IDI_ERROR);//读标准图标。
//标识了该窗口类的光标。P672
    chuangkoulei.hCursor=LoadCursor(NULL,IDC_ARROW);//读标准光标。
//背景颜色。P672
    chuangkoulei.hbrBackground=0;//(HBRUSH)GetStockObject(BLACK_BRUSH);//设置背景。
//菜单名。P672
    chuangkoulei.lpszMenuName=NULL;
//定义窗口类的名字。
    chuangkoulei.lpszClassName="chuangkouleiming";
//注册窗口类。
        RegisterClass(&chuangkoulei);
//创建窗口。
//CreateWindow(窗口类名,标题栏,窗口样式P11,X1,Y1,X2,Y2,指向创建此窗口的父窗口,
//                        指向菜单的句柄,模块实例句柄,指向结构指针P11。)
//GetDesktopWindow()获取桌面窗口句柄,无返回值。
        ckjb=CreateWindow("chuangkouleiming","biaotilan",WS_OVERLAPPEDWINDOW,
                                                100,100,800,600,GetDesktopWindow(),0,hInstance,0);
//初始化dx。
        chushihuadx();
//显示窗口。
        ShowWindow(ckjb,SW_SHOWDEFAULT);
//更新窗口。
        UpdateWindow(ckjb);
//消息循环。
        MSG msg;
        ZeroMemory( &msg, sizeof(msg) );
//GetMessage(指向MSG结构,标识要检查其消息的窗口 如果为NULL 则获取调用该函数的程序的任一
//                窗口,要获取的消息的最小整数值,--最大整数值。最后两个参数为0则获取所有消息。)
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        shifangziyuan();//释放资源,退出程序。
        UnregisterClass("chuangkoulei",chuangkoulei.hInstance);
        return 0;
}
//-------------------------------------------------------------------------窗口过程。
LRESULT WINAPI  chuangkouguocheng(HWND ckjb, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_KEYDOWN:
        {
                switch (wParam)
                {
                        case VK_ESCAPE:
                                PostQuitMessage(0);
                                break;
                        case VK_UP:
                                        y=y-0.2f;
                        //                huitu();
                                        break;
                        case VK_DOWN:
                                        y=y+0.2f;
                                //        huitu();
                                        break;
                        case VK_LEFT:
                                        x=x-0.2f;
                                //        huitu();
                                        break;
                        case VK_RIGHT:
                                        x=x+0.2f;
                                //        huitu();
                                        break;
                        case 69://e
                                a1[1]=a1[1]+0.2f;
                                break;
                        case 68://d
                                a1[1]=a1[1]-0.2f;
                                break;
                        case 70://f
                                yjd=yjd+0.1f;
                                break;
                        case 83://s
                                yjd=yjd-0.1f;
                                break;
                        case 71://g
                                xjd=xjd+0.1f;
                                break;
                        case 72://h
                                xjd=xjd-0.1f;
                                break;
                        case 73://i
                                zjd=zjd+0.1f;
                                break;
                        case 74://j
                                zjd=zjd-0.1f;
                                break;
                }
        }
//case WM_DESTROY://窗口结束消息。
//        PostQuitMessage(0);
//        return 0;
case WM_PAINT://无消息。P704
        xuanran();
//        ValidateRect( ckjb, NULL );
        return 0;
}

return DefWindowProc(ckjb,msg,wParam,lParam);//其他消息。
return 0;
}
//----------------------------------------------------------------------渲染。
void xuanran()
{

dxsbzz->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,//?
                       D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
        dxsbzz->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

dxsbzz->BeginScene();
for(int i=0;i<19;i++)
{
        a=a1;
}
        zbzh();
//设置当前渲染的顶点声明对象,表示渲染的渲染数据流的顶点信息,
dxsbzz->SetVertexDeclaration( ddsmdx );//(顶点声明对象)
//顶点缓冲区中的内容与相应的渲染数据流关联。
//SetStreamSource(渲染数据流序号,顶点缓冲区指针,启始位置,顶点大小)
dxsbzz->SetStreamSource( 0, ddhcq1, 0, sizeof(ddjg) );
//设置当前的顶点渲染函数。
dxsbzz->SetVertexShader( ddxrhs );//(顶点渲染函数)
dxsbzz->SetPixelShader( xsxrhs);  //(像素渲染函数)
//dxsbzz:rawPrimitive(图元类型P36,绘制的起始顶点索引值,图元数量。)
//        dxsbzz->DrawPrimitive( D3DPT_TRIANGLELIST, 0,2);
//关联索引缓冲区。
dxsbzz->SetIndices(syhcq1);
//DrawIndexedPrimitive(图元类型P36,索引缓冲区的启始地址,最小的索引值,绘制的顶点数目,
                                        //第几个点开始绘制,图形数量。)
dxsbzz->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,12,0,12);


dxsbzz->EndScene();
dxsbzz-&gtresent( NULL, NULL, NULL, NULL );
}
//-----------------------------------------------------------------------释放资源。
void shifangziyuan()
{
dxsbzz->Release();
dxdxzz->Release();
ddhcq1->Release();
//wldxzz->Release();
}

//-----------------------------------------------------------------------初始化DX。
void chushihuadx()
{
dxdxzz = Direct3DCreate9( D3D_SDK_VERSION );//创建DX对象。
//创建DX设备对象。P17
//设置传递给LPDIRECT3D9::CreateDevice的参数
//D3DDISPLAYMODE d3ddm;
//dxdxzz->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );//查询显示模式信息。
        D3DPRESENT_PARAMETERS d3dpp;//设备信息结构。
        ZeroMemory( &d3dpp, sizeof(d3dpp) );//用0填充内存区域。
        d3dpp.Windowed = TRUE;//显示方式,TRUE=窗口,FALSE=全屏。
        d3dpp.SwapEffect =D3DSWAPEFFECT_DISCARD;//后台缓存复制到前台后,清除后台缓存内容。
        d3dpp.hDeviceWindow=ckjb;//关联窗口句柄。
        d3dpp.BackBufferFormat =D3DFMT_UNKNOWN;//d3ddm.Format;//D3DFMT_UNKNOWN;
        d3dpp.EnableAutoDepthStencil = TRUE;//打开深度缓冲区。
        d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//深度缓冲区中一个像素由16位整数表示。
//CreateDevice(显示卡序号,DX设备类型,所属窗口句柄,DX设备进行3D运算的方式P18,
//存储DX设备信息的变量地址,返回DX设备接口指针的地址。)
dxdxzz->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
                                ckjb,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                &d3dpp, &dxsbzz );
//创建顶点缓冲区。P42
//CreateVertexBuffer(大小 字节,属性,顶点格式,内存位置,ddhcqzz,保留)
        dxsbzz->CreateVertexBuffer( 10240,0, 0,D3DPOOL_DEFAULT, &ddhcq1,NULL );
//        dxsbzz->CreateVertexBuffer( 10240,0, 0,D3DPOOL_DEFAULT, &ddhcq2,NULL );
//创建索引缓冲区。
//CreateIndexBuffer(大小 字节,属性,元素格式16位或32位索引,内存位置,syhcqzz,保留)
dxsbzz->CreateIndexBuffer(100,0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&syhcq1,0);
//绘图。
huitu();

        D3DVERTEXELEMENT9 ddgs1[] =//顶点格式1。
        {
                { 0, 0,  D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
                { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, 3, 0 },
                D3DDECL_END()
        };
//创建顶点声明对象。CreateVertexDeclaration(顶点格式,顶点声明对象指针的存储地址)
        dxsbzz->CreateVertexDeclaration( ddgs1, &ddsmdx );

//*创建顶点渲染函数。
        //编译渲染指令。
        LPD3DXBUFFER zldmdz;//指令代码地址。
//c4亮度,c5光的方向向量,c6反射系数。
        char xrzl[]="vs_2_0 \n                dcl_position v0 \n                dcl_normal v1 \n                def c4,0.9f,0.9f,0.9f,0.0f \n                def c5,0.5f,0.7f,0.2f,0.0f                def c6,0.1f,0.7f,0.3f,0.0f                m4x4 oPos,v0,c0 \n                dp3 r0,v1,c5                mul r1,r0,c4                mul oD0,r1,c6";
        //D3DXAssembleShader(渲染指令,渲染指令长度,顶点渲染预定义0,D3D效果文件使用0,
        //                                        编译指令选项0,指令代码地址,生成错误信息 0=不生成,P257)
        D3DXAssembleShader(xrzl,strlen(xrzl),0,0,0,&zldmdz,0);
        //创建顶点渲染函数CreateVertexShader(指令地址,生成的顶点渲染函数指针。)
        dxsbzz->CreateVertexShader((DWORD*)zldmdz->GetBufferPointer(),&ddxrhs);
        zldmdz->Release();
//*/


//创建像素渲染函数。
        LPD3DXBUFFER xszldz;//像素指令地址。
        char xszl[]="ps_2_0 \n                def c1,0.9f,0.5f,0.3f,0.0f \n                dcl v0 \n                mov oC0,v0 \n";//像素指令
        //D3DXAssembleShader(渲染指令,渲染指令长度,顶点渲染预定义0,D3D效果文件使用0,
        //                                        编译指令选项0,指令代码地址,生成错误信息 0=不生成,P257)
        D3DXAssembleShader(xszl,strlen(xszl),0,0,0,&xszldz,0);
dxsbzz->CreatePixelShader((DWORD*)xszldz->GetBufferPointer(),
                                                                          &xsxrhs);
        xszldz->Release();
}
//-----------------------------------------------------------------------------绘图。
void huitu()
{


//*
        ddjg* nczzdz;//内存指针地址。
//ddhcqzz:ock(加锁内存起始地址,加锁内存大小,返回内存指针地址,属性P44。)
        ddhcq1->Lock( 0, 0, (void**)&nczzdz, 0 );
//定义三角形顶点数据。
        nczzdz[0].x=D3DXVECTOR3(0.0f,0.0f,0.0f);//0 0 0   0
        nczzdz[0].y=D3DXVECTOR3(1.0f,0.0f,0.0f);
        nczzdz[1].x=D3DXVECTOR3(1.0f,0.0f,0.0f);//1 0 0   1
        nczzdz[1].y=D3DXVECTOR3(0.0f,1.0f,0.0f);
        nczzdz[2].x=D3DXVECTOR3(2.0f,0.0f,0.0f);//2 0 0   2
        nczzdz[2].y=D3DXVECTOR3(0.0f,0.0f,1.0f);
        nczzdz[3].x=D3DXVECTOR3(3.0f,0.0f,0.0f);//3 0 0   3
        nczzdz[3].y=D3DXVECTOR3(1.0f,1.0f,1.0f);
        nczzdz[4].x=D3DXVECTOR3(0.0f,0.0f,1.0f);//0 0 1   4
        nczzdz[4].y=D3DXVECTOR3(1.0f,0.0f,1.0f);
        nczzdz[5].x=D3DXVECTOR3(1.0f,0.0f,1.0f);//1 0 1   5
        nczzdz[5].y=D3DXVECTOR3(0.0f,1.0f,1.0f);
        nczzdz[6].x=D3DXVECTOR3(2.0f,0.0f,1.0f);//2 0 1   6
        nczzdz[6].y=D3DXVECTOR3(1.0f,1.0f,0.0f);
        nczzdz[7].x=D3DXVECTOR3(3.0f,0.0f,1.0f);//3 0 1   7
        nczzdz[7].y=D3DXVECTOR3(2.0f,0.0f,0.0f);

        nczzdz[8].x=D3DXVECTOR3(0.0f,0.0f,2.0f);//0 0 1   8
        nczzdz[8].y=D3DXVECTOR3(0.0f,1.0f,0.0f);
        nczzdz[9].x=D3DXVECTOR3(1.0f,0.0f,2.0f);//1 0 1   9
        nczzdz[9].y=D3DXVECTOR3(0.5f,1.5f,0.5f);
        nczzdz[10].x=D3DXVECTOR3(2.0f,0.0f,2.0f);//2 0 1   10
        nczzdz[10].y=D3DXVECTOR3(1.0f,2.0f,1.0f);
        nczzdz[11].x=D3DXVECTOR3(3.0f,0.0f,2.0f);//3 0 1   11
        nczzdz[11].y=D3DXVECTOR3(1.5f,2.5f,1.5f);
        ddhcq1->Unlock();


        WORD lssz[]={0,1,4,1,4,5,1,5,2,2,6,5,6,3,2,3,7,6,5,8,4,5,8,9,9,6,5,6,9,10,10,7,6,10,7,11};
        void *synczzdz;//索引内存指针地址。
        syhcq1->Lock( 0, 0, (void**)&synczzdz, 0 );
        memcpy(synczzdz,lssz,sizeof(lssz));
        syhcq1->Unlock();

}
void zbzh()
{
D3DXMATRIXA16 MatResult;

    D3DXMATRIXA16 matWorld;
        D3DXMATRIXA16 pyjz;
        D3DXMATRIXA16 xzjzx;
        D3DXMATRIXA16 xzjzy;
        D3DXMATRIXA16 xzjzz;
//    UINT  iTime  = timeGetTime() % 1000;
//    FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
        D3DXMatrixTranslation(&pyjz,a[0],a[1],a[2]);
        D3DXMatrixRotationX( &xzjzx,a[3] );
        D3DXMatrixRotationY( &xzjzy,a[4] );
        D3DXMatrixRotationZ( &xzjzz,a[5] );
        D3DXMatrixMultiply(&matWorld,&xzjzx,&xzjzy);
        D3DXMatrixMultiply(&matWorld,&matWorld,&xzjzz);
        D3DXMatrixMultiply(&matWorld,&matWorld,&pyjz);
//   D3DXMatrixTranslation( &matWorld, 0,0,0 );

    D3DXVECTOR3 vEyePt( a[6], a[7],a[8] );
    D3DXVECTOR3 vLookatPt( a[9], a[10], a[11]);
    D3DXVECTOR3 vUpVec( a[12], a[13], a[14] );
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );

    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, a[15], a[16], a[17],a[18] );


        D3DXMatrixMultiply (&MatResult,&matWorld,&matView);
        D3DXMatrixMultiply (&MatResult,&MatResult,&matProj);
        D3DXMatrixTranspose( &MatResult, &MatResult );

        dxsbzz->SetVertexShaderConstantF( 0, (float*)&MatResult, 4 );


}

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-7-25 23:47:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

//#include <dinput.h>
//#include <windows.h>
//#include <winuser.h>

干嘛注释掉

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
 楼主| 发表于 2006-7-26 20:00:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

不用当然就注释掉了,这样正好可以编译成功。
如果把下面这两行的注释去掉,就会出现我问的问题。
//#include <dinput.h>
//LPDIRECTINPUT8 didxzz = NULL;

0

主题

1037

帖子

1037

积分

金牌会员

Rank: 6Rank: 6

积分
1037
发表于 2006-7-26 21:12:00 | 显示全部楼层

Re:声明LPDIRECTINPUT8 didxzz = NULL;报错。请教怎么解决?

可以编译啊~~~

我在前面加了这些家伙:
#pragma comment(lib, "D3DX9.LIB")
#pragma comment(lib, "D3DXOF.LIB")
#pragma comment(lib, "D3D9.LIB")
#pragma comment(lib, "WINMM.LIB")
#pragma comment(lib, "DINPUT8.LIB")
#pragma comment(lib, "DXGUID.LIB")
#pragma comment(lib, "DSOUND.LIB")
#pragma comment(lib, "DXERR9.LIB")

怀疑是你编译器的问题,虽然这种怀疑毫无根据......
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-10 10:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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