您好我实际上在本教程中学习了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标题中)
我该如何解决这个问题?请。
答案 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以及D3DX9
,D3DX10
和D3DX1
实用程序库。因此,如果您使用的是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。