Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LNK2019:未解析的外部符号_WinMain@16在函数\uuuu\tMainCartStartup中引用_C++_Directx 9_Lnk2019_Winmain - Fatal编程技术网

C++ LNK2019:未解析的外部符号_WinMain@16在函数\uuuu\tMainCartStartup中引用

C++ LNK2019:未解析的外部符号_WinMain@16在函数\uuuu\tMainCartStartup中引用,c++,directx-9,lnk2019,winmain,C++,Directx 9,Lnk2019,Winmain,谷歌搜索了几个小时来解决这个错误,发现很多人都有这个错误,但还没有找到解决我自己问题的方法 大多数情况下,解决方案是将子系统更改为解决方案属性中的相应选项(控制台或Windows)。但我的设置为windows,这在我的情况下是正确的 创建此解决方案时,我使用了文件>新建>项目>Win32项目>(选定)Windows应用程序>(选中)空项目 我的字符集设置为Unicode,我认为这是默认设置 这是我的代码main.cpp: // STANDARD WINDOWS HEADERS #include

谷歌搜索了几个小时来解决这个错误,发现很多人都有这个错误,但还没有找到解决我自己问题的方法

大多数情况下,解决方案是将子系统更改为解决方案属性中的相应选项(控制台或Windows)。但我的设置为windows,这在我的情况下是正确的

创建此解决方案时,我使用了文件>新建>项目>Win32项目>(选定)Windows应用程序>(选中)空项目

我的字符集设置为Unicode,我认为这是默认设置

这是我的代码main.cpp:

// STANDARD WINDOWS HEADERS
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <atlbase.h>

// D3D9 HEADERS
#include <d3d9.h>

// USER MADE HEADERS
#include "errorhelper.h"

#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "DxErr.lib")

// GLOBALS
CComPtr<IDirect3D9>                 d3d;
CComPtr<IDirect3DDevice9>           d3ddev;
CComPtr<IDirect3DVertexBuffer9>     vbuffer;
CComPtr<IDirect3DIndexBuffer9>      ibuffer;

namespace GameEngine
{
    // define the windowed resolution
    #define SCREEN_WIDTH    1280                                // horizontal resolution
    #define SCREEN_HEIGHT   720                                 // vertical resolution
    #define CheckHr(hr) CheckForDxError(__FILE__,__LINE__,hr)
    #define D3DFVF_VERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

    struct VERTEX
    {
        FLOAT x, y, z, rhw;
        DWORD color;
    };

    //-----------------------------------------------------------------------------
    // Name: InitVB()
    // Desc: Initializes the vertex buffer
    //-----------------------------------------------------------------------------
    void InitVB()
    {
        VERTEX vertices[] = 
        {
            {0.0f,  0.0f,   0.0f,   1.0f,   0xffffffff},
            {10.0f, 0.0f,   0.0f,   1.0f,   0xffffffff},
            {10.0f, 10.0f,  0.0f,   1.0f,   0xffffffff},
            {0.0f,  10.0f,  0.0f,   1.0f,   0xffffffff},
        };      
        CheckHr(d3ddev->CreateVertexBuffer(sizeof(vertices), 0, D3DFVF_VERTEX, D3DPOOL_DEFAULT, &vbuffer, NULL));
        void* pvertices;
        CheckHr(vbuffer->Lock(0, sizeof(vertices), (void**) &pvertices, 0));
        memcpy(pvertices, vertices, sizeof(vertices));
        CheckHr(vbuffer->Unlock());
    }

    //-----------------------------------------------------------------------------
    // Name: InitIB()
    // Desc: Initializes the index buffer
    //----------------------------------------------------------------------------
    void InitIB()
    {
        short indices[] =
        {
            0, 1, 2,
            2, 3, 0
        };
        CheckHr(d3ddev->CreateIndexBuffer(sizeof(indices), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &ibuffer, NULL));
        void* pindices;
        CheckHr(ibuffer->Lock(0, sizeof(indices), (void**) &pindices, 0));
        memcpy(pindices, indices, sizeof(indices));
        CheckHr(ibuffer->Unlock());
    }

    //-----------------------------------------------------------------------------
    // Name: Render()
    // Desc: Draws the scene
    //-----------------------------------------------------------------------------
    void Render()
    {
        if( d3ddev == NULL )
            return;

        CheckHr(d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0));

        CheckHr(d3ddev->BeginScene());

        CheckHr(d3ddev->SetStreamSource(0, vbuffer, 0, sizeof(VERTEX)));
        CheckHr(d3ddev->SetIndices(ibuffer));
        CheckHr(d3ddev->SetFVF(D3DFVF_VERTEX));

        CheckHr(d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2));

        CheckHr(d3ddev->EndScene());

        CheckHr(d3ddev->Present(NULL, NULL, NULL, NULL));
    }

    //-----------------------------------------------------------------------------
    // Name: InitD3D()
    // Desc: Initializes Direct3D
    //-----------------------------------------------------------------------------
    void InitD3D( HWND hWnd )
    {
        // Create the d3d object
        d3d.Attach(::Direct3DCreate9(D3D_SDK_VERSION));
        if( NULL == d3d )
            throw("Failed to create Direct3D object");

        // Set the device settings
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp, sizeof(d3dpp));
        d3dpp.BackBufferWidth = SCREEN_WIDTH;                   // width of back buffer
        d3dpp.BackBufferHeight = SCREEN_HEIGHT;                 // height of the back buffer
        d3dpp.BackBufferCount = 1;                              // number of back buffers
        d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES;       // MSAA (anti-alia, number of samples
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;               // how to swap the front and back buffer
        d3dpp.hDeviceWindow = hWnd;                             // handle to the window
        d3dpp.Windowed = TRUE;                                  // fullscreen/windowed

        // Create the device 
        CheckHr( d3d->CreateDevice(D3DADAPTER_DEFAULT, 
                                        D3DDEVTYPE_HAL, 
                                        hWnd, 
                                        D3DCREATE_HARDWARE_VERTEXPROCESSING, 
                                        &d3dpp, &d3ddev ));
    }

    //-----------------------------------------------------------------------------
    // Name: Cleanup()
    // Desc: Releases all previously initialized objects
    //-----------------------------------------------------------------------------
    void Cleanup()
    {
        d3d = 0;
        d3ddev = 0;
        vbuffer = 0;
        ibuffer = 0;
    }

    //-----------------------------------------------------------------------------
    // Name: WindowProc()
    // Desc: The window's message handler
    //-----------------------------------------------------------------------------
    LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            // the message that is sent when you click on the red x
            case WM_DESTROY:
                Cleanup();
                PostQuitMessage(0);
                return 0;

            case WM_PAINT:
                Render();
                ValidateRect( hWnd, NULL );
                return 0;
        }

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

    //-----------------------------------------------------------------------------
    // Name: WinMain()
    // Desc: The application's entry point
    //-----------------------------------------------------------------------------
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        // Create the window class
        WNDCLASSEX wc;
        ZeroMemory(&wc, sizeof(WNDCLASSEX));
        wc.cbSize           = sizeof(WNDCLASSEX);           
        wc.style            = CS_HREDRAW | CS_VREDRAW;      
        wc.lpfnWndProc      = WindowProc;                   
        wc.hInstance        = hInstance;                    
        wc.hCursor          = LoadCursor(NULL, IDC_ARROW);  
        wc.hbrBackground    = (HBRUSH)COLOR_WINDOW;         
        wc.lpszClassName    = L"WindowClass1";              

        // Register the window class
        RegisterClassEx(&wc);

        // Calculate the neede window size
        RECT ws = {0, 0, SCREEN_WIDTH, SCREEN_HEIGHT};          
        AdjustWindowRect(&ws, WS_OVERLAPPEDWINDOW, FALSE);

        // Ceate the window
        HWND hWnd = CreateWindowEx(NULL, L"WindowClass1", L"Game Engine", WS_OVERLAPPEDWINDOW,  
                                   300, 300, ws.right - ws.left, ws.bottom - ws.top, 
                                   NULL, NULL, hInstance, NULL);    
        // Initialize Direct3D
        InitD3D(hWnd);

        InitVB();
        InitIB();

        // Show the window
        ShowWindow( hWnd, nCmdShow );

        // The message loop.
        MSG msg; 
        while( GetMessage( &msg, NULL, 0, 0 ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }


        UnregisterClass( L"WindowClass1", hInstance );
        return 0;
    }   
}
//标准WINDOWS标题
#包括
#包括
#包括
#包括
//D3D9标题
#包括
//用户制作的标题
#包括“errorhelper.h”
#pragma注释(lib,“d3d9.lib”)
#pragma注释(lib,“DxErr.lib”)
//全球的
CComPtr d3d;
CComPtr d3ddev;
首席执行官vbuffer;
伊布弗伯爵;
命名空间游戏引擎
{
//定义窗口分辨率
#定义屏幕宽度1280//水平分辨率
#定义屏幕高度720//垂直分辨率
#定义CheckHr(hr)CheckForDxError(_文件,_行,hr)
#定义D3DFVF_顶点(D3DFVF_XYZRHW | D3DFVF_漫反射)
结构顶点
{
浮动x、y、z、rhw;
德沃德颜色;
};
//-----------------------------------------------------------------------------
//名称:InitVB()
//Desc:初始化顶点缓冲区
//-----------------------------------------------------------------------------
void InitVB()
{
顶点[]=
{
{0.0f,0.0f,0.0f,1.0f,0xffffffff},
{10.0f,0.0f,0.0f,1.0f,0xffffffff},
{10.0f,10.0f,0.0f,1.0f,0xffffffff},
{0.0f,10.0f,0.0f,1.0f,0xffffffff},
};      
选中HR(d3ddev->CreateVertexBuffer(顶点大小),0,D3DFVF_顶点,D3DPOOL_默认值,&vbuffer,NULL));
无效*pverties;
选中hr(vbuffer->Lock(0,顶点大小),(void**)和pvertices,0);
memcpy(pverties,顶点,sizeof(顶点));
选中hr(vbuffer->Unlock());
}
//-----------------------------------------------------------------------------
//名称:InitIB()
//Desc:初始化索引缓冲区
//----------------------------------------------------------------------------
void InitIB()
{
短期指数[]=
{
0, 1, 2,
2, 3, 0
};
选中HR(d3ddev->CreateIndexBuffer(索引大小),0,D3DFMT_索引16,D3DPOOL_默认值,&ibuffer,NULL));
无效*小方块;
选中hr(ibuffer->Lock(0,索引大小),(无效**)和pindices,0);
memcpy(pindice、index、sizeof(index));
选中hr(ibuffer->Unlock());
}
//-----------------------------------------------------------------------------
//名称:Render()
//描述:绘制场景
//-----------------------------------------------------------------------------
void Render()
{
如果(d3ddev==NULL)
返回;
检查hr(d3ddev->清除(0,空,D3DCLEAR_目标,D3DCOLOR_XRGB(0,0,255),1.0f,0));
检查hr(d3ddev->BeginScene());
选中HR(d3ddev->SetStreamSource(0,vbuffer,0,sizeof(顶点));
检查HR(d3ddev->设置索引(ibuffer));
检查HR(d3ddev->SetFVF(D3DFVF_顶点));
选中HR(d3ddev->DrawIndexedPrimitive(D3DPT_三角形列表,0,0,4,0,2));
选中HR(d3ddev->EndScene());
检查HR(d3ddev->Present(NULL,NULL,NULL,NULL));
}
//-----------------------------------------------------------------------------
//名称:InitD3D()
//描述:初始化Direct3D
//-----------------------------------------------------------------------------
无效初始D3D(HWND HWND)
{
//创建d3d对象
附加(::Direct3DCreate9(d3d_SDK_版本));
如果(NULL==d3d)
抛出(“未能创建Direct3D对象”);
//设置设备设置
D3D当前参数d3dpp;
零内存(&d3dpp,sizeof(d3dpp));
d3dpp.BackBufferWidth=屏幕宽度;//后缓冲区的宽度
d3dpp.BackBufferHeight=屏幕高度;//后缓冲区的高度
d3dpp.BackBufferCount=1;//后缓冲区的数量
d3dpp.MultiSampleType=D3DMmultisample_4_SAMPLES;//MSAA(反alia,样本数
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;//如何交换前后缓冲区
d3dpp.hDeviceWindow=hWnd;//窗口的句柄
d3dpp.Windowed=TRUE;//全屏/加窗
//创建设备
选中HR(d3d->CreateDevice(D3DADAPTER_默认值,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp和d3ddev);
}
//-----------------------------------------------------------------------------
//名称:Cleanup()
//Desc:释放所有以前初始化的对象
//-----------------------------------------------------------------------------
空洞清理()
{
d3d=0;
d3ddev=0;
vbuffer=0;
ibuffer=0;
}
//-----------------------------------------------------------------------------
//名称:WindowProc()
//Desc:窗口的消息处理程序
//-----------------------------------------------------------------------------
LRESULT回调WindowProc(HWND HWND,UINT msg,WPARAM WPARAM,LPARAM LPARAM)
{
开关(msg)
{
#include <Windows.h>
#include <windowsx.h>
#include <comdef.h>
#include <DxErr.h>

#pragma comment (lib, "DxErr.lib")

void CheckForDxError(const char *file, int line, HRESULT hr)
{
    if (!FAILED(hr))
        return;

    // Get the direct X error and description
    char desc[1024];
    sprintf( desc,  "(DX) %s - %s" , DXGetErrorString(hr),  DXGetErrorDescription(hr) );

    // Output the file and line number in the correct format + the above DX error
    char buf[4096];
    sprintf( buf,  "%s(%d) : Error: %s\n", file, line, desc);

    OutputDebugStringA(buf);

    // Cause the debugger to break here so we can fix the problem
    DebugBreak();
}