不能包含的头文件!(包含它必定出错!)

时间:2021-04-22 19:24:43
我在程序中使用系统提供的函数SHBrowseForFolder来选择一个目录,于是我查了一下MSDN,发现它需要包含头文件 #include "ShlObj.h" 。于是我就这样做了。但是。。。。。。我一编译,就。。。。。。
[C++ Error] ShlObj.h(1762): E2238 Multiple declaration for 'FVSHOWINFO'
[C++ Error] ShlObj.h(1936): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] ShlObj.h(3717): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Error] ShlObj.h(4808): E2238 Multiple declaration for 'SHELLFLAGSTATE'
有没有搞错,我没有做任何其它声明啊!我后来专门新建了一个工程,里面什么都不改,就只#include "ShlObj.h"
结果仍然一样!看样子是VCL中也定义了同样的数据类型。谁能告诉我该怎么办?
(我后来把Shlobj.h中的与SHBrowseForFolder相关的声明复制到我自己的头文件中,就可以使用这个函数了,但是现在我想用一下SHGetSpecialFolderLocation,用这种方法就不行了!因为该函数涉及到重复定义的类型。有没有谁知道怎样才能使用这个头文件呢?)
环境:(Win98 + BCB 5.0)

4 个解决方案

#1


你应该包含的头文件应该是shlobj.hpp,而且在你的工程中加入一个预定义符号NO_WIN32_LEAN_AND_MEAN。

#2


这些符号FVSHOWINFO、FOLDERSETTINGS、DESKBANDINFO、SHELLFLAGSTATE已经在其它的头文件中定义了,找到重复定义的头文件,处理一下或者删除重复定义部分。

#3


感谢Wingsun!正如您说的那样,我照做就编译成功了。
但是好象不用包含shlobj.hpp了。
因为以前我包含shlobj.h出错,如果没有包含shlobj.hpp,那么就不会出现重复定义。
我试着不包含shlobj.hpp,结果也编译通过了。

请问Wingsun,是不是BCB会自动包含shlobj.hpp呢?

to xiaozuo:您的想法符合C原理,可惜我没有包含其它任何非系统的头文件,这些重复定义是BCB的系统头文件造成的,如果改动它,不知道会出现什么新的问题!不过非常感谢您对我的回答!

#4


BCB5's patch have resolved the problem!

#1


你应该包含的头文件应该是shlobj.hpp,而且在你的工程中加入一个预定义符号NO_WIN32_LEAN_AND_MEAN。

#2


这些符号FVSHOWINFO、FOLDERSETTINGS、DESKBANDINFO、SHELLFLAGSTATE已经在其它的头文件中定义了,找到重复定义的头文件,处理一下或者删除重复定义部分。

#3


感谢Wingsun!正如您说的那样,我照做就编译成功了。
但是好象不用包含shlobj.hpp了。
因为以前我包含shlobj.h出错,如果没有包含shlobj.hpp,那么就不会出现重复定义。
我试着不包含shlobj.hpp,结果也编译通过了。

请问Wingsun,是不是BCB会自动包含shlobj.hpp呢?

to xiaozuo:您的想法符合C原理,可惜我没有包含其它任何非系统的头文件,这些重复定义是BCB的系统头文件造成的,如果改动它,不知道会出现什么新的问题!不过非常感谢您对我的回答!

#4


BCB5's patch have resolved the problem!