none
关于头包含头文件的问题 RRS feed

  • 问题

  • 我用的是VS2005.net, VC++

    我想把string转成BSTR,再传给.com接口, 我在网上查到,要在.net中使用“BSTR”的话,要包含comdef.h,所以:

    #include<comdef.h>

    ...

    但是加了以上包含后,出现很多错误,都是C2872,其中一部分如下:

    C:\Program Files\Microsoft Platform SDK\Include\winbase.h(3496) : error C2872: 'FILETIME' : ambiguous symbol
            could be 'C:\Program Files\Microsoft Platform SDK\Include\windef.h(366) : _FILETIME FILETIME'
            or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::Runtime::InteropServices::FILETIME'
    C:\Program Files\Microsoft Platform SDK\Include\winbase.h(3497) : error C2872: 'FILETIME' : ambiguous symbol
            could be 'C:\Program Files\Microsoft Platform SDK\Include\windef.h(366) : _FILETIME FILETIME'
            or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::Runtime::InteropServices::FILETIME'
    C:\Program Files\Microsoft Platform SDK\Include\winbase.h(3498) : error C2872: 'FILETIME' : ambiguous symbol
            could be 'C:\Program Files\Microsoft Platform SDK\Include\windef.h(366) : _FILETIME FILETIME'
            or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::Runtime::InteropServices::FILETIME'
    C:\Program Files\Microsoft Platform SDK\Include\winbase.h(3677) : error C2872: 'FILETIME' : ambiguous symbol
            could be 'C:\Program Files\Microsoft Platform SDK\Include\windef.h(366) : _FILETIME FILETIME'
            or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::Runtime::InteropServices::FILETIME'

    ........

    说winbase.h,windef.h,mscorlib.dll 3个文件内的定义有重复,但是我查遍了我的程序,都没包含这些文件,在reference中也没有相关的.dll。 是不是我引用的第三方的.dll中有包含这些头文件?

    请教各位高人怎么解决呀。。。。。

    另外,要是版主觉得发错了地方,请帮忙移到相应的版面

    2012年8月31日 9:28

答案

  • 自己找到的解决方法:

    在包含前面加#define WIN32_LEAN_AND_MEAN就好了,而且一定要挨着头文件,如下:

    #define WIN32_LEAN_AND_MEAN

    #include<comdef.h>

    。。。

    参考如下:

    http://support.microsoft.com/kb/166474/zh-cn

    我的理解是WIN32_LEAN_AND_MEAN是用来减少头文件大小的,但也可以用来避免变量的重复定义,还请各位高人指正

    2012年9月3日 2:20
  • 您好,

    很高兴您自己找到了解决方法,也感谢您在此分享经验。

    WIN32_LEAN_AND_MEAN是windows用来排除很少使用的头文件,从而加速程序生成的过程。

    您使用了#define WIN32_LEAN_AND_MEAN之后,某些头文件被排除了,这间接解决了多个头文件中重复定义的问题。

    (如果您觉得我的回复对您有帮助,麻烦将其标记为答案,谢谢!)


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月3日 10:52
    版主

全部回复

  • 自己找到的解决方法:

    在包含前面加#define WIN32_LEAN_AND_MEAN就好了,而且一定要挨着头文件,如下:

    #define WIN32_LEAN_AND_MEAN

    #include<comdef.h>

    。。。

    参考如下:

    http://support.microsoft.com/kb/166474/zh-cn

    我的理解是WIN32_LEAN_AND_MEAN是用来减少头文件大小的,但也可以用来避免变量的重复定义,还请各位高人指正

    2012年9月3日 2:20
  • 您好,

    很高兴您自己找到了解决方法,也感谢您在此分享经验。

    WIN32_LEAN_AND_MEAN是windows用来排除很少使用的头文件,从而加速程序生成的过程。

    您使用了#define WIN32_LEAN_AND_MEAN之后,某些头文件被排除了,这间接解决了多个头文件中重复定义的问题。

    (如果您觉得我的回复对您有帮助,麻烦将其标记为答案,谢谢!)


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月3日 10:52
    版主
  • 您好,

    我暂时将自己的答复也标记为答案,如果您不同意我的回复,请取消答复标记,并提出您的质疑。

    谢谢!


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月7日 2:42
    版主