gpt4 book ai didi

c++ - LNK2019 DirectX 未解析的外部符号;文件 dxerr.lib

转载 作者:行者123 更新时间:2023-11-28 04:49:54 27 4
gpt4 key购买 nike

遇到一个我无法弄清楚的 LINK2019 错误。错误代码:严重性代码说明项目文件行抑制状态错误 LNK2019 未解析的外部符号 __vsnprintf 在函数“long __stdcall StringVPrintfWorkerA(char *,unsigned int,unsigned int *,char const *,char *)”中引用 (?StringVPrintfWorkerA@@YGJPADIPAIPBD0@Z) Direct X C:\Visual Studio Programs\Direct X\Direct X\dxerr.lib(dxerra.obj) 1

主要.cpp:

#include <Windows.h>
#include <memory>
#include "BlankDemo.h"


LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
LPWSTR cmdLine, int cmdShow)
{
UNREFERENCED_PARAMETER(prevInstance);
UNREFERENCED_PARAMETER(cmdLine);

WNDCLASSEX wndClass = { 0 };
wndClass.cbSize = sizeof(WNDCLASS);
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_EX_OVERLAPPEDWINDOW, FALSE);

HWND hwnd = CreateWindowA("DX11BookWindowClass", "BlankWin32Window",
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);

std::auto_ptr<Dx11DemoBase> demo(new BlankDemo());

// Demo Initialize
bool result = demo->Initialize(hInstance, hwnd);

// Error reporting if there is an issue
if (result == false)
return -1;

MSG msg = { 0 };

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

else
{
// Update and Draw
demo->Update(0.0f);
demo->Render();
}
}
// Demo Shutdown
demo->Shutdown();

return static_cast<int>(msg.wParam);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT paintStruct;
HDC hDC;

switch (message)
{
case WM_PAINT:
hDC = BeginPaint(hwnd, &paintStruct);
EndPaint(hwnd, &paintStruct);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;

defualt:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}

// implementation of the BlankDemo class
BlankDemo::BlankDemo()
{

}

BlankDemo::~BlankDemo()
{

}

bool BlankDemo::LoadContent()
{
return true;
}

void BlankDemo::UnloadContent()
{

}

void BlankDemo::Update(float dt)
{

}

void BlankDemo::Render()
{
if (d3dContext_ == 0)
return;

float clearColor[4] = { 0.0f, 0.0f, 0.25f, 1.0f };
d3dContext_->ClearRenderTargetView(backBufferTarget_, clearColor);

swapChain_->Present(0, 0);
}

BlankDemo.h 文件:

#pragma once
#ifndef _BLANK_DEMO_H_
#define _BLANK_DEMO_H_
#include "Dx11DemoBase.h"

class BlankDemo : public Dx11DemoBase
{
public:
BlankDemo();
virtual ~BlankDemo();

bool LoadContent();
void UnloadContent();

void Update(float dt);
void Render();
};

#endif // !_BLANK_DEMO_H_

Dx11DemoBase::Dx11DemoBase() : driverType_(D3D_DRIVER_TYPE_NULL),
featureLevel_(D3D_FEATURE_LEVEL_11_0), d3dDevice_(0), d3dContext_(0),
swapChain_(0), backBufferTarget_(0)
{

}

Dx11DemoBase::~Dx11DemoBase()
{
Shutdown();
}

bool Dx11DemoBase::LoadContent()
{
// Override with demo specifics, if any...
return true;
}

void Dx11DemoBase::UnloadContent()
{
// Override with demo specifics, if any...
}

void Dx11DemoBase::Shutdown()
{
UnloadContent();

if (backBufferTarget_) backBufferTarget_->Release();
if (swapChain_) swapChain_->Release();
if (d3dContext_) d3dContext_->Release();
if (d3dDevice_) d3dDevice_->Release();
d3dDevice_ = 0;
d3dContext_ = 0;
swapChain_ = 0;
backBufferTarget_ = 0;
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

bool Dx11DemoBase::Initialize(HINSTANCE hInstance, HWND hwnd)
{
hInstance_ = hInstance;
hwnd_ = hwnd;

RECT dimensions;
GetClientRect(hwnd, &dimensions);

unsigned int width = dimensions.right - dimensions.left;
unsigned int height = dimensions.bottom - dimensions.top;

D3D_DRIVER_TYPE driverTypes[] =
{
D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP, D3D_DRIVER_TYPE_SOFTWARE
};

unsigned int totalDriverTypes = ARRAYSIZE(driverTypes);

D3D_FEATURE_LEVEL featureLevels[] =
{
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
};

unsigned int totalFeatureLevels = ARRAYSIZE(featureLevels);

DXGI_SWAP_CHAIN_DESC swapChainDesc;
ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));
swapChainDesc.BufferCount = 1;
swapChainDesc.BufferDesc.Width = width;
swapChainDesc.BufferDesc.Height = height;
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.OutputWindow = hwnd;
swapChainDesc.Windowed = true;
swapChainDesc.SampleDesc.Count = 1;
swapChainDesc.SampleDesc.Quality = 0;

unsigned int creationFlags = 0;

#ifdef _DEBUG
creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif

HRESULT result;
unsigned int driver = 0;

for (driver = 0; driver < totalDriverTypes; ++driver)
{
result = D3D11CreateDeviceAndSwapChain(0, driverTypes[driver], 0,
creationFlags, featureLevels, totalFeatureLevels, D3D11_SDK_VERSION,
&swapChainDesc, &swapChain_, &d3dDevice_, &featureLevel_, &d3dContext_);

if (SUCCEEDED(result))
{
driverType_ = driverTypes[driver];
break;
}
}
if (FAILED(result))
{
DXTRACE_MSG("Failed to create the Direct3d device!");
return false;
}

ID3D11Texture2D* backBufferTexture;

result = swapChain_->GetBuffer(0, _uuidof(ID3D11Texture2D), (LPVOID*)&backBufferTexture);

if (FAILED(result))
{
DXTRACE_MSG("Failed to get the swap chain back buffer!");
return false;
}
result = d3dDevice_->CreateRenderTargetView(backBufferTexture, 0, &backBufferTarget_);

if (backBufferTexture)
backBufferTexture->Release();
if (FAILED(result))
{
DXTRACE_MSG("Failed to create the render target view!");
return false;
}

d3dContext_->OMSetRenderTargets(1, &backBufferTarget_, 0);

D3D11_VIEWPORT viewport;
viewport.Width = static_cast<float>(width);
viewport.Height = static_cast<float>(height);
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;
viewport.TopLeftX = 0.0f;
viewport.TopLeftY = 0.0f;

d3dContext_->RSSetViewports(1, &viewport);

return LoadContent();
}

最后,Dx11DemoBase.h header :

#pragma once

#ifndef _DEMO_BASE_H_
#define _DEMO_BASE_H_

#include <d3d11.h>
#include <D3DX11.h>
#include <dxerr.h>

class Dx11DemoBase
{
public:
Dx11DemoBase();
virtual ~Dx11DemoBase();

bool Initialize(HINSTANCE hInstance, HWND hwnd);
void Shutdown();

virtual bool LoadContent();
virtual void UnloadContent();

virtual void Update(float dt) = 0;
virtual void Render() = 0;

protected:

HINSTANCE hInstance_;

HWND hwnd_;

D3D_DRIVER_TYPE driverType_;
D3D_FEATURE_LEVEL featureLevel_;

ID3D11Device* d3dDevice_;
ID3D11DeviceContext* d3dContext_;
IDXGISwapChain* swapChain_;
ID3D11RenderTargetView* backBufferTarget_;
};

#endif // !_DEMO_BASE_H_

最佳答案

legacy_stdio_definitions.lib 添加到 Project properties > Configuration Properties > Linker > Input 中的 Additional dependencies 列表,如本答案中所推荐:https://stackoverflow.com/a/34230122/6693304

关于c++ - LNK2019 DirectX 未解析的外部符号;文件 dxerr.lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com