我有一个c ++ Windows应用程序,可以使用Visual Studio 2010很好地进行编译。我还希望能够使用MinGW(在Windows7-64 PC上)对其进行编译。当g ++处理xaudio2.h头文件时,出现以下错误。除了手动修改包含文件之外,没有人知道修复方法。

SDKS/DX/Include/xaudio2.h:51:1: error: pasting "5a508685" and "-" does not give
a valid preprocessing token
SDKS/DX/Include/xaudio2.h:51:1: error: pasting "-" and "a254" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:51:1: error: pasting "a254" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:51:1: error: pasting "-" and "4fba" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:51:1: error: pasting "4fba" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:51:1: error: pasting "-" and "9b" does not give a vali
d preprocessing token
SDKS/DX/Include/xaudio2.h:51:1: error: pasting "9b82" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:51:1: error: pasting "-" and "9a" does not give a vali
d preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "db05ea35" and "-" does not give
a valid preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "-" and "0329" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "0329" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "-" and "4d4b" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "4d4b" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "-" and "a5" does not give a vali
d preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "a53a" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:52:1: error: pasting "-" and "6d" does not give a vali
d preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "8bcf1f58" and "-" does not give
a valid preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "-" and "9fe7" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "9fe7" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "-" and "4583" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "4583" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "-" and "8a" does not give a vali
d preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "8ac6" and "-" does not give a va
lid preprocessing token
SDKS/DX/Include/xaudio2.h:53:1: error: pasting "-" and "e2" does not give a vali
d preprocessing token
In file included from common/system.h:71:0,
                 from game.cpp:1:
SDKS/DX/Include/xaudio2.h:65:69: fatal error: sal.h: No such file or directory
compilation terminated.


这是xaudio2.h中的行:

DEFINE_CLSID(XAudio2, 5a508685, a254, 4fba, 9b, 82, 9a, 24, b0, 03, 06, af);
DEFINE_CLSID(XAudio2_Debug, db05ea35, 0329, 4d4b, a5, 3a, 6d, ea, d0, 3d, 38, 52);
DEFINE_IID(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb);


它看起来像在comdecl.h中的定义为:

#define DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
            class DECLSPEC_UUID_WRAPPER(l##-##w1##-##w2##-##b1##b2##-##b3##b4##b5##b6##b7##b8) className; \
            EXTERN_C const GUID CLSID_##className

#define DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
            interface DECLSPEC_UUID_WRAPPER(l##-##w1##-##w2##-##b1##b2##-##b3##b4##b5##b6##b7##b8) interfaceName; \
            EXTERN_C const GUID IID_##interfaceName

最佳答案

找到了可行的技巧。包括XAudio2,就好像来自C而不是C ++。

#undef __cplusplus
#include <xaudio2.h>
#define __cplusplus

关于c++ - 使用g++ 4.6.1尝试包含xaudio2.h时,出现许多C++编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9593013/

10-11 22:57