游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3418|回复: 9

D3D最简单的一个程序,高手指点一下

[复制链接]

5

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2008-3-3 17:35:00 | 显示全部楼层 |阅读模式
这个程序编译有错,错误是 error C2731: 'WinMain' : function cannot be overloaded
(库文件和包含文件的路径已经设置好了,也加载了d3d9.lib)

程序内容(简单看看就行):
#include "d3d9.h"


//全局变量
LPDIRECT3D9 g_pD3D = NULL;//Direct3D对象
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;//Direct3d设备对象


//初始化Direct3D
HRESULT init3D(HWND hWnd)
{
        //创建Direct3D对象,该对象用来创建Direct3D设备对象
        if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
        {
                return E_FAIL;
        }
        //设置D3DPERSENT_PARAMETERS结构,准备创建Direct3D设备对象
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp,sizeof(d3dpp));
        d3dpp.Windowed = true;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

        //创建Direct3D设备对象
        if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
                D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                &d3dpp,&g_pd3dDevice)))
        {
                return E_FAIL;
        }
        return S_OK;
}

//释放创建对象
void cleanUp()
{
        //释放Direct3D设备对象
        if (g_pd3dDevice != NULL)
        {
                g_pd3dDevice->Release();
        }
        //释放Direct3D对象
        if (g_pD3D != NULL)
        {
                g_pD3D->Release();
        }
}

//渲染图形
VOID render()
{
        //清空后台缓冲区
        g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(45,50,170),1.0f,0);
        if (SUCCEEDED(g_pd3dDevice->BeginScene()))
        {
                //在后台缓冲区绘制图形



                //结束在后台缓冲区渲染图形
                g_pd3dDevice->EndScene();
        }
        //将在后台缓冲区绘制的图形提交到前台缓冲区显示
        g_pd3dDevice-&gtresent(NULL,NULL,NULL,NULL);
}

//消息处理
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
        switch (msg)
        {
        case WM_PAINT:
                // TODO: Add any drawing code here...
                render();
                ValidateRect(hWnd,NULL);
                return 0;

        case WM_DESTROY:
                cleanUp();
                PostQuitMessage(0);

                return 0;
        }
        return DefWindowProc(hWnd, msg, wParam, lParam);
}

//程序入口
INT WINAPI WinMain(HINSTANCE hInst,
                                   HINSTANCE ,
                                   LPTSTR    ,
                                   INT       )
{
        //注册窗口类
        WNDCLASSEX wc = {sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandle(NULL),
                NULL,NULL,NULL,NULL,L"ClassName",NULL};

        RegisterClassEx( &wc );

        //创建窗口
        HWND hWnd = CreateWindow(L"ClassName",L"最简单的",
                WS_OVERLAPPEDWINDOW,200,100,600,500,
                NULL,NULL,wc.hInstance,NULL);

        //初始化Direct3D

        if (SUCCEEDED(init3D(hWnd)))
        {
                //显示主窗口
                ShowWindow(hWnd,SW_SHOWDEFAULT);
                UpdateWindow(hWnd);

                //进入消息循环
                MSG msg;
                ZeroMemory(&msg,sizeof(msg));
                while (msg.message != WM_QUIT)
                {
                        if (PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
                        {
                                TranslateMessage(&msg);
                                DispatchMessage(&msg);
                        }else
                        {
                                render();
                        }
                }
        }
        UnregisterClass(L"ClassName",wc.hInstance);

        return 0;
}

abc

11

主题

650

帖子

651

积分

高级会员

Rank: 4

积分
651
发表于 2008-3-3 19:27:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

include <windows.h>         ?

64

主题

272

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
发表于 2008-3-3 20:45:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

包含这两个库试试 d3d9.lib d3dx9.lib

0

主题

2

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2008-3-3 22:23:00 | 显示全部楼层

Re: D3D最简单的一个程序,高手指点一下

INT WINAPI WinMain(HINSTANCE hInst,
   HINSTANCE ,
   LPTSTR    ,
   INT       )
改成
INT WINAPI WinMain(HINSTANCE hInst,
   HINSTANCE ,
   LPSTR    ,
   INT       )

或才WinMain改成wWinMain
具体的问题,说不清楚,我也是初学,忘高手解释.

5

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2008-3-4 09:28:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

问题解决了,把WinMain改成wWinMain.
但是我还是不知道为什么这么改?
我是按照<<精通DirectX 3D 图形与动画程序设计>>里的第一个例子写的.
刚开始学就遇到了小小挫折啊~
还是回头先好好看看Windows编程吧~

2

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2008-3-4 09:49:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

可能设置了某个UNICODE开关。导致运行库加载时需要找到宽字符版的程序入口。

5

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2008-3-4 10:13:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

我装的是.net2005英文版,据说是正版.
在哪改UNICODE开关啊.

4

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2008-3-5 10:02:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

error C2731: 'WinMain' : function cannot be overloaded
错误是说WinMain函数不能重载,写的时候注意下参数和返回类型的一致就没事了.

4

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2008-3-5 10:10:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

用中文的.
Unicode应该是 projects→** property →configure property(配置属性) 的第一项倒数第三个.没用过英文版不知道怎么写的

0

主题

13

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2008-3-5 19:05:00 | 显示全部楼层

Re:D3D最简单的一个程序,高手指点一下

估计你创建工程时出现问题。如果你直接用cpp来编译vc2005就会这种问题。所以要新建项目->win32项目->空工程;
之后导入cpp文件再加入lib后编译。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 07:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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