このDirectXコードのエラーを解決するにはどうすればよいですか?

セラフ

まず第一に、私はまだプログラミングが苦手なので、些細な問題を解決できない場合は許してください。基本的な画面をウィンドウに表示したいので、3つの異なるソースからフレームワークを作成しました。それを完全に理解するために、ステップごとに記述したかったのです。しかし、それでも、私はこの3つのエラーを受け取り、それらを解決する方法がわかりません。よろしくお願いします。

最初のコード:

#ifndef WINAPPFRAME_H
#define WINAPPFRAME_H


#include <windows.h>
#include <windowsx.h>
#include <d3d11.h>
#include <d3dx11.h>
#include <d3dx10.h>
#include <string>


#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")


#define Release(x) { if(x){ x->Release(); x = 0; } }

#ifndef HR
    #define HR(x) (x)
#endif

class D3Dwap
{

public:
    D3Dwap(HINSTANCE hInstance);
    ~D3Dwap();

    HINSTANCE AppInst()const;
HWND      MainWnd()const;

bool Initialize();
int Run();
void Draw();

static LRESULT CALLBACK MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

protected:
bool InitMainWindow();
bool InitDirect3D(); 

protected:
HINSTANCE hD3DwapInst;
HWND      hMainWnd;

ID3D11Device* D3Dwap_device; 
ID3D11DeviceContext* D3Dwap_dev_context;
IDXGISwapChain* D3Dwap_SwapChain;
ID3D11Texture2D* D3Dwap_DepthStencilBuffer;
ID3D11RenderTargetView* D3Dwap_RenderTargetView;
ID3D11DepthStencilView* D3Dwap_DepthStencilView;
D3D11_VIEWPORT D3Dwap_ScreenViewport;
ID3D11Texture2D* backBuffer;

std::wstring MainWndCaption;
D3D_DRIVER_TYPE d3dDriverType;
int ScreenWidth;
int ScreenHeight;
};

D3Dwap* d3dwapl = 0;

#endif

2番目の部分:

#include "WinAppFrame.h"


LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return d3dwapl->MsgProc(hwnd, msg, wParam, lParam);
}

D3Dwap::D3Dwap(HINSTANCE hInstance):
hD3DwapInst(hInstance),
MainWndCaption(L"Engine 2.0"),
d3dDriverType(D3D_DRIVER_TYPE_HARDWARE),
ScreenWidth(800),
ScreenHeight(600),
hMainWnd(0),
D3Dwap_device(0),
D3Dwap_dev_context(0),
D3Dwap_SwapChain(0) {}


D3Dwap::~D3Dwap()
{
Release(D3Dwap_SwapChain);

if( D3Dwap_dev_context )
    D3Dwap_dev_context->ClearState(); //Ha még aktív az ezköz tartalma, törli azt

Release(D3Dwap_dev_context);
Release(D3Dwap_device);
}

HINSTANCE D3Dwap::AppInst()const
{
return hD3DwapInst;
}

HWND D3Dwap::MainWnd()const
{
return hMainWnd;
}

int D3Dwap::Run()
{
MSG msg;

while(msg.message != WM_QUIT)
{
    if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }

    Draw();
}

return msg.wParam;
}

bool D3Dwap::Initialize()
{
if(!InitMainWindow())
    return false;

if(!InitDirect3D())
    return false;

return true;
}

LRESULT D3Dwap::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
    case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
}

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

bool D3Dwap::InitMainWindow()
{
WNDCLASSEX wc;

wc.style         = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc   = MainWndProc; 
wc.cbClsExtra    = 0;
wc.cbWndExtra    = 0;
wc.hInstance     = hD3DwapInst;
wc.hIcon         = LoadIcon(0, IDI_APPLICATION);
wc.hCursor       = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);
wc.lpszClassName = L"D3Dwap_test";

if( !RegisterClassEx(&wc) )
{
    MessageBox(0, L"Az ablakot nem sikerült regisztrálni", 0, 0);
    return false;
}

RECT Rect = { 0, 0, ScreenWidth, ScreenHeight };
AdjustWindowRect(&Rect, WS_OVERLAPPEDWINDOW, false);
int width  = Rect.right - Rect.left;
int height = Rect.bottom - Rect.top;

hMainWnd = CreateWindow (L"D3Dwap_test",
                         MainWndCaption.c_str(),
                         WS_OVERLAPPEDWINDOW,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         width, 
                         height,
                         0,
                         0,
                         hD3DwapInst,
                         0);

if( !hMainWnd )
{
    MessageBox(0, L"Az ablakot nem sikerült létrehozni!", 0, 0);
    return false;
}

ShowWindow(hMainWnd, SW_SHOW);
UpdateWindow(hMainWnd);

return true;
}

bool D3Dwap::InitDirect3D()
{
UINT create_D3Dwap_device_flags = 0;

D3D_FEATURE_LEVEL featurelevel;

HRESULT hr = D3D11CreateDevice(0,
                               d3dDriverType,
                               0,
                               create_D3Dwap_device_flags = 0,
                               0,
                               0,
                               D3D11_SDK_VERSION,
                               &D3Dwap_device,
                               &featurelevel,
                               &D3Dwap_dev_context);

if( FAILED(hr) )
{
    MessageBox(0, L"A D3D11 eszközt nem sikerült létrehozni!", 0, 0);
    return false;
}

if( featurelevel != D3D_FEATURE_LEVEL_11_0 )
{
    MessageBox(0, L"A DirectX 11.0 a hardware által nem támogatott!", 0, 0);
    return false;
}

DXGI_SWAP_CHAIN_DESC sd;

sd.BufferDesc.Width  = ScreenWidth;
sd.BufferDesc.Height = ScreenHeight;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
sd.SampleDesc.Count = 1;                               
sd.SampleDesc.Quality = 0;
sd.BufferUsage  = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.BufferCount  = 1;
sd.OutputWindow = hMainWnd;
sd.Windowed     = true;
sd.SwapEffect   = DXGI_SWAP_EFFECT_DISCARD;
sd.Flags        = 0;

IDXGIDevice* dxgiDevice = 0;    
if(FAILED(HR(D3Dwap_device->QueryInterface(__uuidof(IDXGIDevice), (void**)&dxgiDevice))))
{
    return false;
}

IDXGIAdapter* dxgiAdapter = 0;
if(FAILED(HR(dxgiDevice->GetParent(__uuidof(IDXGIAdapter), (void**)&dxgiAdapter))))
{
    return false;
}

IDXGIFactory* dxgiFactory = 0;
if(FAILED(HR(dxgiAdapter->GetParent(__uuidof(IDXGIFactory), (void**)&dxgiFactory))))
{
    return false;
}

HR(dxgiFactory->CreateSwapChain(D3Dwap_device, &sd, &D3Dwap_SwapChain));


ID3D11Texture2D* backBuffer;

if(FAILED(HR(D3Dwap_SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&backBuffer)))))
{
    return false;
}

if(FAILED(HR(D3Dwap_device->CreateRenderTargetView(backBuffer, 0, &D3Dwap_RenderTargetView))))
{
    return false;
}

Release(backBuffer);


D3D11_TEXTURE2D_DESC depthStencilDesc;

depthStencilDesc.Width     = ScreenWidth;
depthStencilDesc.Height    = ScreenHeight;
depthStencilDesc.MipLevels = 1;
depthStencilDesc.ArraySize = 1;
depthStencilDesc.Format    = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthStencilDesc.SampleDesc.Count   = 1;
depthStencilDesc.SampleDesc.Quality = 0;
depthStencilDesc.Usage          = D3D11_USAGE_DEFAULT;
depthStencilDesc.BindFlags      = D3D11_BIND_DEPTH_STENCIL;
depthStencilDesc.CPUAccessFlags = 0; 
depthStencilDesc.MiscFlags      = 0;

if(FAILED(HR(D3Dwap_device->CreateTexture2D(&depthStencilDesc, 0, &D3Dwap_DepthStencilBuffer))))
{
    return false;
}

if(FAILED(HR(D3Dwap_device->CreateDepthStencilView(D3Dwap_DepthStencilBuffer, 0, &D3Dwap_DepthStencilView))))
{
    return false;
}

D3Dwap_dev_context->OMSetRenderTargets(1, &D3Dwap_RenderTargetView, D3Dwap_DepthStencilView);

D3Dwap_ScreenViewport.TopLeftX = 0;
D3Dwap_ScreenViewport.TopLeftY = 0;
D3Dwap_ScreenViewport.Width    = static_cast<float>(ScreenWidth);
D3Dwap_ScreenViewport.Height   = static_cast<float>(ScreenHeight);
D3Dwap_ScreenViewport.MinDepth = 0.0f;
D3Dwap_ScreenViewport.MaxDepth = 1.0f;

D3Dwap_dev_context->RSSetViewports(1, &D3Dwap_ScreenViewport);

Release(dxgiDevice);
Release(dxgiAdapter);
Release(dxgiFactory);

return true;
}

および3番目のコード:

#include "WinAppFrame.h"

class InitDirect3Dwap : public D3Dwap
{
public:
InitDirect3Dwap(HINSTANCE hInstance);
~InitDirect3Dwap();

bool Initialize();
void UpdateScene(float dt);
void Draw(); 
};

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
               PSTR cmdLine, int showCmd)
{
// Enable run-time memory check for debug builds.
#if defined(DEBUG) | defined(_DEBUG)
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif

InitDirect3Dwap theApp(hInstance);

if( !theApp.Initialize() )
    return 0;

return theApp.Run();
}

InitDirect3Dwap::InitDirect3Dwap(HINSTANCE hInstance)
: D3Dwap(hInstance) 
{
}

InitDirect3Dwap::~InitDirect3Dwap()
{
}

bool InitDirect3Dwap::Initialize()
{
if(!D3Dwap::Initialize())
    return false;

return true;
}

void InitDirect3Dwap::UpdateScene(float dt)
{

}

void InitDirect3Dwap::Draw()
{
    D3Dwap_dev_context->ClearRenderTargetView(D3Dwap_RenderTargetView, D3DXCOLOR(0.0f, 0.2f, 0.4f, 1.0f));
D3Dwap_dev_context->ClearDepthStencilView(D3Dwap_DepthStencilView, D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0);

HR(D3Dwap_SwapChain->Present(0, 0));
}

1番目:エラー29エラーLNK2005: "class D3Dwap * d3dwapl"(?d3dwapl @@ 3PAVD3Dwap @@ A)はすでにmain.obj C:\ Users \ Seraph \ documents \ Visual Studio 2012 \ Projects \ Engine_2.0 \ Engine_2で定義されています。 0 \ WinAppFrame.obj Engine_2.0

2番目:エラー30エラーLNK2019:未解決の外部シンボル "public:void __thiscall D3Dwap :: Draw(void)"(?Draw @ D3Dwap @@ QAEXXZ)が関数 "public:int __thiscall D3Dwap :: Run(void)"(? Run @ D3Dwap @@ QAEHXZ)C:\ Users \ Seraph \ documents \ Visual Studio 2012 \ Projects \ Engine_2.0 \ Engine_2.0 \ WinAppFrame.obj Engine_2.0

3番目:エラー31エラーLNK1120:1未解決の外部C:\ Users \ Seraph \ documents \ Visual Studio 2012 \ Projects \ Engine_2.0 \ Debug \ Engine_2.0.exe 1 1 Engine_2.0

エルビタリ

「WinAppFrame.h」を2回インクルードすると、そこで定義されているクラスが複製されます。この問題の一般的な解決策は、

#pragma once

WinAppFrame.hファイルの先頭。

次に、クラスD3DwapでメソッドDrawを宣言しますが、対応する.cppファイルに定義がありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

レコードの更新中にエラーを解決するにはどうすればよいですか?

分類Dev

VHDLでコードのエラーを解決するにはどうすればよいですか?

分類Dev

Scalaコードで次のエラーを解決するにはどうすればよいですか?

分類Dev

このコンパイルエラーを解決するにはどうすればよいですか?

分類Dev

Android Studioコードの取得エラーを解決するにはどうすればよいですか?

分類Dev

WebGL Unityゲームでこのエラーを解決するにはどうすればよいですか?

分類Dev

MySQL Workbenchでこれらの行エラーを解決するにはどうすればよいですか?

分類Dev

C ++コードでこのcmakeの問題を解決するにはどうすればよいですか?

分類Dev

このエラーを解決してココアポッドをインストールするにはどうすればよいですか?

分類Dev

コマンドラインでこの新しいエラーを解決するにはどうすればよいですか?

分類Dev

Gulpのこの縮小エラーを解決するにはどうすればよいですか?

分類Dev

このdjango OneToOneFieldモデルのエラーを解決するにはどうすればよいですか?

分類Dev

Python3のこのpipエラーを解決するにはどうすればよいですか?

分類Dev

このタイプのmysqlエラーを解決するにはどうすればよいですか?

分類Dev

このメモリエラーの問題を解決するにはどうすればよいですか?

分類Dev

これらのMaven内部エラーを解決するにはどうすればよいですか?

分類Dev

POST中にこの422エラーを解決するにはどうすればよいですか?

分類Dev

JavaでこのNullPointerExceptionエラーを解決するにはどうすればよいですか?

分類Dev

MiniZincでこのエラーを解決するにはどうすればよいですか?

分類Dev

React + MaterialUIでこのエラーを解決するにはどうすればよいですか?

分類Dev

schemaspyでこのエラーを解決するにはどうすればよいですか?

分類Dev

grailsでこのBuildConfigエラーを解決するにはどうすればよいですか

分類Dev

Pythonでこのエラーを解決するにはどうすればよいですか?

分類Dev

Swift2でこのエラーを解決するにはどうすればよいですか?

分類Dev

Python djangoでこのエラーを解決するにはどうすればよいですか?

分類Dev

Swiftでこのエラーを解決するにはどうすればよいですか?

分類Dev

win32読み取り画像ファイルコードでこのエラーを解決するにはどうすればよいですか?

分類Dev

このコードをJSPで解決するにはどうすればよいですか?

分類Dev

このJava Jdbc接続エラーを解決するにはどうすればよいですか?

Related 関連記事

  1. 1

    レコードの更新中にエラーを解決するにはどうすればよいですか?

  2. 2

    VHDLでコードのエラーを解決するにはどうすればよいですか?

  3. 3

    Scalaコードで次のエラーを解決するにはどうすればよいですか?

  4. 4

    このコンパイルエラーを解決するにはどうすればよいですか?

  5. 5

    Android Studioコードの取得エラーを解決するにはどうすればよいですか?

  6. 6

    WebGL Unityゲームでこのエラーを解決するにはどうすればよいですか?

  7. 7

    MySQL Workbenchでこれらの行エラーを解決するにはどうすればよいですか?

  8. 8

    C ++コードでこのcmakeの問題を解決するにはどうすればよいですか?

  9. 9

    このエラーを解決してココアポッドをインストールするにはどうすればよいですか?

  10. 10

    コマンドラインでこの新しいエラーを解決するにはどうすればよいですか?

  11. 11

    Gulpのこの縮小エラーを解決するにはどうすればよいですか?

  12. 12

    このdjango OneToOneFieldモデルのエラーを解決するにはどうすればよいですか?

  13. 13

    Python3のこのpipエラーを解決するにはどうすればよいですか?

  14. 14

    このタイプのmysqlエラーを解決するにはどうすればよいですか?

  15. 15

    このメモリエラーの問題を解決するにはどうすればよいですか?

  16. 16

    これらのMaven内部エラーを解決するにはどうすればよいですか?

  17. 17

    POST中にこの422エラーを解決するにはどうすればよいですか?

  18. 18

    JavaでこのNullPointerExceptionエラーを解決するにはどうすればよいですか?

  19. 19

    MiniZincでこのエラーを解決するにはどうすればよいですか?

  20. 20

    React + MaterialUIでこのエラーを解決するにはどうすればよいですか?

  21. 21

    schemaspyでこのエラーを解決するにはどうすればよいですか?

  22. 22

    grailsでこのBuildConfigエラーを解決するにはどうすればよいですか

  23. 23

    Pythonでこのエラーを解決するにはどうすればよいですか?

  24. 24

    Swift2でこのエラーを解決するにはどうすればよいですか?

  25. 25

    Python djangoでこのエラーを解決するにはどうすればよいですか?

  26. 26

    Swiftでこのエラーを解決するにはどうすればよいですか?

  27. 27

    win32読み取り画像ファイルコードでこのエラーを解決するにはどうすればよいですか?

  28. 28

    このコードをJSPで解決するにはどうすればよいですか?

  29. 29

    このJava Jdbc接続エラーを解決するにはどうすればよいですか?

ホットタグ

アーカイブ