В коде не существует ничего под именнем _DXGI_DEBUG_ALL
или в чего то в этом духе, существует только DXGI_DEBUG_ALL
(без нижнего подчеркивания). При линковке в Visual Studio 2019, выдает:
LNK2001 | unresolved external symbol _DXGI_DEBUG_ALL | DxgiInfoManager.obj | Line: 1
LNK2120 | 1 unresolved externals | DxgiInfoManager.obj | Line: 1
И вот что ты не поделаешь, а оно всеравно ругаеться на подчеркивание!
КОД DxgiInfoManager.h:
#pragma once
#include "Win.h"
#include <wrl.h>
#include <string>
#include <vector>
#include <dxgidebug.h>
class DxgiInfoManager
{
public:
DxgiInfoManager();
~DxgiInfoManager();
DxgiInfoManager(const DxgiInfoManager&) = delete;
DxgiInfoManager& operator=(const DxgiInfoManager&) = delete;
void Set() noexcept;
std::vector<std::string> GetMesssages() const;
private:
unsigned long long next = 0u;
struct IDXGIInfoQueue* pDxgiInfoQueue = nullptr;
};
КОД DxgiInfoManager.cpp:
#include "DxgiInfoManager.h"
#include "Window.h"
#include "Graphics.h"
#include <dxgidebug.h>
#include <memory>
#include <dxgidebug.h>
#define GFX_THROW_NOINFO(hrcall) if( FAILED( hr = (hrcall) ) ) throw Graphics::HrException( __LINE__,__FILE__,hr )
DxgiInfoManager::DxgiInfoManager()
{
// define function signature of DXGIGetDebugInterface
typedef HRESULT(WINAPI * DXGIGetDebugInterface)(REFIID, void**);
// load the dll that contains the function DXGIGetDebugInterface
const auto hModDxgiDebug = LoadLibraryEx("dxgidebug.dll", nullptr, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
if (hModDxgiDebug == nullptr)
{
throw WND_LAST_EXCEPT();
}
// get address of DXGIGetDebugInterface
const auto DxgiGetDebugInterface = reinterpret_cast<DXGIGetDebugInterface>(
reinterpret_cast<void*>(GetProcAddress( hModDxgiDebug, "DXGIGetDebugInterface" ))
);
if (DxgiGetDebugInterface == nullptr)
{
throw WND_LAST_EXCEPT();
}
HRESULT hr;
GFX_THROW_NOINFO(DxgiGetDebugInterface(__uuidof(IDXGIInfoQueue), reinterpret_cast<void**>(&pDxgiInfoQueue)));
}
DxgiInfoManager::~DxgiInfoManager()
{
}
void DxgiInfoManager::Set() noexcept
{
// set the index (next) so that the next all to GetMessage()
// will only get errors generated after this all
next = pDxgiInfoQueue->GetNumStoredMessages(DXGI_DEBUG_ALL);
}
std::vector<std::string> DxgiInfoManager::GetMesssages() const
{
std::vector<std::string> messages;
const auto end = pDxgiInfoQueue->GetNumStoredMessages(DXGI_DEBUG_ALL);
for (auto i = next; i < end; i++)
{
HRESULT hr;
SIZE_T messageLength;
// get the size of a messsage i in bytes
GFX_THROW_NOINFO(pDxgiInfoQueue->GetMessage(DXGI_DEBUG_ALL, i, nullptr, &messageLength));
// alocate memory for message
auto bytes = std::make_unique<byte[]>(messageLength);
auto pMessage = reinterpret_cast<DXGI_INFO_QUEUE_MESSAGE*>(bytes.get());
// get the message and push its description into vector
GFX_THROW_NOINFO(pDxgiInfoQueue->GetMessage(DXGI_DEBUG_ALL, i, pMessage, &messageLength));
messages.emplace_back(pMessage->pDescription);
}
return messages;
}
Если потребуеться дополнительная информация, постараюсь добавить как можно скорее :)
В C/C++ x86 глобальные переменные и "C"-функции, при трансляции в ассемблер, получают префикс "_" . У вас переменная DXGI_DEBUG_ALL видимо описана, как extern, но нигде не размещена.
То есть переменную DXGI_DEBUG_ALL надо указать в каком-то cpp файле без extern
Добавьте dxguid.lib
в список библиотек для линковки.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Столкнулся с проблемой сборки библиотеки pcre2, с параметром PCRE2_CODE_UNIT_WIDTH 0, для UTF-8, UTF-16, UTF-32, сборка проходит без проблем, однако при сборке для...
Возможно глупый вопрос, не судите строгоВ общем, у меня есть объект на него нужно передать ссылку этого-же типа
Я новичок в верстке,так что помидорами не кидайтесь) Как сделаны такие сайты, что слева и справа находится очень длинный фон, а по середине...
Хочу передать значение некоторых полей в таблицу своей БДПроблема в том, что добавляется только две записи и не более, даже если объектов...