关于头包含头文件的问题

时间:2020-11-29 16:45:53

关于头包含头文件的问题 关于头包含头文件的问题

Pergunta

关于头包含头文件的问题

我用的是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中有包含这些头文件?

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

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

sexta-feira, 31 de agosto de 2012 09:28

Respostas

  • 关于头包含头文件的问题

    自己找到的解决方法:

    在包含前面加#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是用来减少头文件大小的,但也可以用来避免变量的重复定义,还请各位高人指正

    segunda-feira, 3 de setembro de 2012 02:20
  • 关于头包含头文件的问题

    您好,

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

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

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

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


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us
    关于头包含头文件的问题

    segunda-feira, 3 de setembro de 2012 10:52

Todas as Respostas

  • 关于头包含头文件的问题

    自己找到的解决方法:

    在包含前面加#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是用来减少头文件大小的,但也可以用来避免变量的重复定义,还请各位高人指正

    segunda-feira, 3 de setembro de 2012 02:20
  • 关于头包含头文件的问题

    您好,

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

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

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

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


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us
    关于头包含头文件的问题

    segunda-feira, 3 de setembro de 2012 10:52
  • 关于头包含头文件的问题

    您好,

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

    谢谢!


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us
    关于头包含头文件的问题