使用Shobjidl.h的Microsoft SDK中的奇怪错误

时间:2012-12-13 22:08:34

标签: c++ windows

我想在cpp中检索当前用户文档文件夹的文件夹,因此我使用SHGetFolderPath并包含Shobjidl.h

结果我的代码无法编译,并生成以下输出:

1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\shobjidl.h(8994): error C2143: syntax error : missing ')' before 'constant'
1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\shobjidl.h(8994): error C2143: syntax error : missing ';' before 'constant'
1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\shobjidl.h(8994): error C2059: syntax error : ')'
1>C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\shobjidl.h(8994): error C2238: unexpected token(s) preceding ';'

这些错误背后的代码是:

        virtual HRESULT STDMETHODCALLTYPE GetInt32( 
            /* [in] */ __RPC__in REFPROPERTYKEY key,
            /* [out] */ __RPC__out int *pi) = 0; // <- this line produces compile error

怎么了?提前谢谢。

我正在使用Win 7,VS2010 Express。

1 个答案:

答案 0 :(得分:2)

根据the documentation,您需要为该函数添加的头文件为Shlobj.h,而不是Shobjidl.h。我猜Shobjidl.h可能是一个内部头文件,并不意味着直接包含它 - 它可能取决于之前已经包含的其他头文件,这将修复你看到的错误。