DirectX 11和g ++编译错误

时间:2017-11-30 14:34:20

标签: c++ g++ directx-11

您好我实际上在本教程中学习了DirectX 11:http://www.rastertek.com/dx11tut03.html

第一部分

我的代码(问题来自哪里): d3dclass.h:

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

//Include
#include <dxgi.h>
#include <d3dcommon.h>
#include <d3d11.h>
#include <d3dx10math.h>

我喜欢这个教程,唯一不同的是我用g ++编译它,通过这个命令:

g ++ -mwindows WinMain.cpp systemclass.cpp inputclass.cpp graphicsclass.cpp d3dclass.cpp -o Prog.exe -I“D:\ Program File \ DirectX SDK \ Include”2&gt; log.txt的

但是在输出文件中,我有很多错误。这是log.txt:

https://drive.google.com/open?id=1XUlcAFUyRcLIvdKbe0FkLVjkvwxpOmEv

总结一下日志中有很多像__in这样的东西没有在dxgi.h中声明,但是这个头是来自DirectX11库;

第二部分

通过添加以下内容我找到了解决我的许多问题的方法(第一部分):

#define __in
#define __out
#define __inout
#define __in_bcount(x)
#define __out_bcount(x)
#define __in_ecount(x)
#define __out_ecount(x)
#define __in_ecount_opt(x)
#define __out_ecount_opt(x)
#define __in_bcount_opt(x)
#define __out_bcount_opt(x)
#define __in_opt
#define __inout_opt
#define __out_opt
#define __out_ecount_part_opt(x,y)
#define __deref_out
#define __deref_out_opt
#define __RPC__deref_out

但仍有一个主要问题,这是错误输出:

 D:\Programme File\DirectX SDK\Include/d3dx10core.h:345:13: error: expected ';' at end of member declaration
     HRESULT WINAPI_INLINE GetDesc(D3DX10_FONT_DESCA *pDesc) { return GetDescA(pDesc); }

它来自WINAPI_INLINE(这是在DirectX标题中)

我该如何解决这个问题?请。

1 个答案:

答案 0 :(得分:2)

我没有使用g ++的经验,但我可以在这里提供一些细节。要使用g ++,您需要install the Windows SDK并将其配置为包含正确的路径。传统的DirectX SDK需要Windows SDK,而不是完全独立的。

  

请注意,旧版DirectX SDK和Windows SDK并不声称与GCC工具链兼容。

__in__out等宏被称为&#34; SAL注释&#34;它们可以在Microsoft内部和使用Visual C ++的/analyze开关时提高静态代码分析的质量。它们被定义为“空白”和“空白”。在其他情况下,他们只是从代码中删除。宏在Windows SDK中定义。在包含#include <sal.h>版本之前,您可以尝试明确地执行#include <specstrings.h>和/或dxgi.h

要记住的另一件事是,旧版DirectX SDK本身是deprecated以及D3DX9D3DX10D3DX1实用程序库。因此,如果您使用的是Windows 8.0,8.1或10 SDK,则可以在不使用它的情况下对Direct3D 11进行编码 - 请参阅Living without D3DX。如果您确实希望继续使用那些较旧的帮助程序 - 有些过时的rastertek教程假设 - ,您可以这样做,但是您需要确保在之后搜索DirectX SDK包含和lib路径Windows SDK包含/ lib路径。

  

如果你使用的是Visual C ++(BTW有free Community edition可用),那么你可能会有更轻松的时间。您可能还想查看DirectX Tool Kit tutorials