我的引擎有一个非常具体的编码问题。我一直在关注如何编程引擎的书,但现在我写下了代码(不是整个代码,而只是开始工作的必要部分)。但现在我必须演唱一些非常奇怪的演唱会,有人可以帮助我吗? 注意:这是一个我正在谈论的directx 11游戏引擎。 谢谢。
错误是:1 IntelliSense:类型“const wchar_t *”的参数与“const char *”类型的参数不兼容
我的代码是: 标题文件:
#ifndef ERROR_CHECKER_H
#define ERROR_CHECKER_H
#include "main.cpp"
#if defined(DEBUG) ||defined (_DEBUG)
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#endif
#if defined(DEBUG) | defined(_DEBUG)
#ifndef HR
#define HR(x) \
{ \
HRESULT hr = (x); \
if (FAILED(hr)) \
{ \
DXTrace(__FILE__, (DWORD)__LINE__, hr, L#x, true);\
} \
}
#endif
#else
#ifndef HR
#define HR(x) (x)
#endif
#endif
#endif ERROR_CHECKER_H
main.cpp文件:
#include <windows.h>
#include <windowsx.h>
#include <d3d11.h>
#include <d3dx11.h>
#include <d3dx10.h>
#include <DXErr.h>
#include <xnamath.h>
#include <iostream>
#include <string>
#include <cassert>
#include <ctime>
#include <algorithm>
#include <sstream>
#include <fstream>
#include <vector>
#include "Tools.h"
#include "GameTimerClass.h"
#include "Error checker.h"
以及问题所在的代码:
void Framework_App::OnResize()
{
assert(MainDevContext);
assert(MainD3DDevice);
assert(mSwapChain);
ReleaseCOM(mRenderTargetView);
ReleaseCOM(mDepthStencilView);
ReleaseCOM(mDepthStencilBuffer);
HR(mSwapChain->ResizeBuffers(1, mClientWitdh, mClientHeight, DXGI_FORMAT_R8G8B8A8_UNORM, 0));
}
}
我已经构建了相同的类来执行调整大小和其他函数,但直到此函数没有问题。
此代码字符串是问题所在:
HR(mSwapChain->ResizeBuffers(1, mClientWitdh, mClientHeight, DXGI_FORMAT_R8G8B8A8_UNORM, 0));
答案 0 :(得分:1)
HR宏的定义假设您使用的是UNICODE而不是ASCII,但是传统的DirectX SDK(2010年6月)版本的DXERR.H已将DXTrace定义为ASCII版本(DXTraceA),因为您不需要在项目中定义了UNICODE。
HRESULT WINAPI DXTraceA( __in_z const char* strFile, __in DWORD dwLine, __in HRESULT hr, __in_z_opt const char* strMsg, __in BOOL bPopMsgBox );
HRESULT WINAPI DXTraceW( __in_z const char* strFile, __in DWORD dwLine, __in HRESULT hr, __in_z_opt const WCHAR* strMsg, __in BOOL bPopMsgBox );
#ifdef UNICODE
#define DXTrace DXTraceW
#else
#define DXTrace DXTraceA
#endif
为了使您的HR宏在两种情况下都很健壮,您可以拥有两个版本的HR宏,或者您可以在HR实现中使用&#34; L#x&#34;显式调用DXTraceW。或DXTraceA与&#34;#x&#34;。优先考虑UNICODE版本。
DXTraceW(__FILE__, (DWORD)__LINE__, hr, L#x, true);\
BTW,强烈建议所有新应用程序仅使用UNICODE,而不是ASCII。各种&#34;现代&#34; Microsoft平台不支持ASCII Win32 API。