Directx const wchar_t到const char *

时间:2014-07-24 13:38:54

标签: c++ directx-11

我的引擎有一个非常具体的编码问题。我一直在关注如何编程引擎的书,但现在我写下了代码(不是整个代码,而只是开始工作的必要部分)。但现在我必须演唱一些非常奇怪的演唱会,有人可以帮助我吗? 注意:这是一个我正在谈论的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));

1 个答案:

答案 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。