首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开始DirectX 11游戏编程错误

开始DirectX 11游戏编程错误
EN

Stack Overflow用户
提问于 2012-07-30 22:01:32
回答 2查看 1.8K关注 0票数 1

这是它在第33页给我的代码:

代码语言:javascript
复制
#include<Windows.h>

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
       LPWSTR cmdLine, int cmdShow)
{
    UNREFERENCED_PARAMETER( prevInstance );
    UNREFERENCED_PARAMETER( cmdLine );
    WNDCLASSEX wndClass = { 0 };
    wndClass.cbSize = sizeof( WNDCLASSEX ) ;
    wndClass.style = CS_HREDRAW | CS_VREDRAW;
    wndClass.lpfnWndProc = WndProc;
    wndClass.hInstance = hInstance;
    wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
    wndClass.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = "DX11BookWindowClass";
    if( !RegisterClassEx( &wndClass ) )
    return -1;
    RECT rc = { 0, 0, 640, 480 };
    AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );
    HWND hwnd = CreateWindowA( "DX11BookWindowClass", "Blank Win32 Window",
    WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.
    left,
    rc.bottom - rc.top, NULL, NULL, hInstance, NULL );
    if( !hwnd )
    return -1;
    ShowWindow( hwnd, cmdShow );

    return 0;
}

这段代码给了我两个错误-

1>转换需要reinterpret_cast、C样式的强制转换或函数样式的==========构建:0成功,1失败,0最新版本,0跳过==========。

基本上

'WndProc‘:未声明的标识符和'=’:无法从'const 20‘转换为'LPCWSTR’

这个代码有什么问题?

EN

回答 2

Stack Overflow用户

发布于 2012-07-30 23:34:27

下面是您的代码的基本工作程序:

代码语言:javascript
复制
#include<Windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
            {
                    case WM_CLOSE:
                            DestroyWindow(hwnd);
                            break;
                    case WM_DESTROY:
                            PostQuitMessage(0);
                            break;
                    default:
                            return DefWindowProc(hwnd,
                                                 message,
                                                 wParam,
                                                 lParam);
            }
    return 0;
}

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
       LPSTR cmdLine, int cmdShow)
{
    UNREFERENCED_PARAMETER( prevInstance );
    UNREFERENCED_PARAMETER( cmdLine );
    WNDCLASSEX wndClass = { 0 };
    wndClass.cbSize = sizeof( WNDCLASSEX ) ;
    wndClass.style = CS_HREDRAW | CS_VREDRAW;
    wndClass.lpfnWndProc = WndProc;
    wndClass.hInstance = hInstance;
    wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
    wndClass.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = "DX11BookWindowClass";
    if( !RegisterClassEx( &wndClass ) )
    return -1;
    RECT rc = { 0, 0, 640, 480 };
    AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );
    HWND hwnd = CreateWindowA( L"DX11BookWindowClass", L"Blank Win32 Window",
    WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.
    left,
    rc.bottom - rc.top, NULL, NULL, hInstance, NULL );
    if( !hwnd )
    return -1;
    ShowWindow( hwnd, cmdShow );
    MSG msg;
    while (GetMessage (&msg, 0, 0, 0))
            {
                TranslateMessage (&msg);
                DispatchMessage (&msg);
            }
    return msg.wParam;
}

点数:

  1. 我添加了一个WndProc,它处理发送到您程序的所有消息。
  2. 我在您的程序中添加了一个消息循环。否则,窗户马上就会关上。
  3. 我在另一个答案中添加了L前缀,这是the_mandrill的建议。

这几乎就是WinAPI编程的"Hello“。但是,我强烈建议您先学习WinAPI,然后再开始DirectX编程。

票数 2
EN

Stack Overflow用户

发布于 2012-07-30 22:18:14

问题是该项目是作为Unicode构建的,但是您的代码不是Unicode。换句话说,Windows调用需要宽(即16位)字符串,但是代码使用8位字符串('char')。LPCWSTR的意思是指向常量宽字符串的长指针。所以函数调用需要一个恒定的宽字符串,但是您传递的是一个8位字符串。你有两个选择:

  • 更改项目以使用非Unicode库(属性-> General ->字符集=‘使用多字节’)
  • 修改您的代码,使其成为Unicode。在这种情况下,通过更改字符串,它就是在抱怨将它们变成宽字符串。你可以用L (如L"DX11BookWindowClass" )给它们加上前缀。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11730323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档