关于头包含头文件的问题

关于头包含头文件的问题 关于头包含头文件的问题解决方法_定义_重复__Visual_C++_

  • Pergunta

  • Question

    我用的是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

  • Question

    自己找到的解决方法:

    在包含前面加#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
  • Question

    您好,

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

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

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

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


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us
    关于头包含头文件的问题解决方法_定义_重复__Visual_C++_

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

Todas as Respostas

  • Question

    自己找到的解决方法:

    在包含前面加#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
  • Question

    您好,

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

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

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

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


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us
    关于头包含头文件的问题解决方法_定义_重复__Visual_C++_

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

    您好,

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

    谢谢!


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us
    关于头包含头文件的问题解决方法_定义_重复__Visual_C++_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C头文件可以说是万能头文件,因为它可以包含其他头文件、声明变量、定义函数和宏等,使得在程序中使用各种功能变得更加方便。下面我将详细解释一下C头文件的作用和使用。 首先,头文件可以包含其他头文件。在项目中,我们可能需要使用到不同的函数库或者模块,这些库或模块通常会提供对应的头文件来声明其提供的函数和类。通过使用头文件,我们可以将这些功能模块包含到我们的代码中,使得可以直接调用其中的函数或使用其中的类,而无需重复定义和声明。 其次,头文件可以声明变量和定义函数。在C语言中,我们需要在使用某个变量或函数之前进行声明,以便编译器能够正确识别和处理。头文件中可以声明变量、函数和结构体等,使得在不同的源文件中可以共享这些定义,避免了重复定义的问题。 另外,头文件还可以定义宏。宏定义在C语言中非常常用,可以用于简化重复的代码、增强代码的可读性和可维护性。通过在头文件中定义宏,我们可以在整个项目中随时使用这些宏,从而简化代码编写过程。 总而言之,C头文件作为一种程序的组织方式,可以帮助我们更好地管理和使用代码。它的“万能”之处在于可以包含其他头文件、声明变量、定义函数和宏等。通过合理地使用头文件,我们可以提高代码的复用性和可维护性,使得程序开发更加高效和简洁。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值