关于头包含头文件的问题
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中有包含这些头文件?
请教各位高人怎么解决呀。。。。。
另外,要是版主觉得发错了地方,请帮忙移到相应的版面
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是用来减少头文件大小的,但也可以用来避免变量的重复定义,还请各位高人指正
- Marcado como Resposta Damon ZhengMicrosoft contingent staff, Moderator sexta-feira, 7 de setembro de 2012 02:24
-
您好,
很高兴您自己找到了解决方法,也感谢您在此分享经验。
WIN32_LEAN_AND_MEAN是windows用来排除很少使用的头文件,从而加速程序生成的过程。
您使用了#define WIN32_LEAN_AND_MEAN之后,某些头文件被排除了,这间接解决了多个头文件中重复定义的问题。
(如果您觉得我的回复对您有帮助,麻烦将其标记为答案,谢谢!)
Damon Zheng [MSFT]
MSDN Community Support | Feedback to us- Editado Damon ZhengMicrosoft contingent staff, Moderator segunda-feira, 3 de setembro de 2012 10:53
- Marcado como Resposta Damon ZhengMicrosoft contingent staff, Moderator sexta-feira, 7 de setembro de 2012 02:41
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是用来减少头文件大小的,但也可以用来避免变量的重复定义,还请各位高人指正
- Marcado como Resposta Damon ZhengMicrosoft contingent staff, Moderator sexta-feira, 7 de setembro de 2012 02:24
-
您好,
很高兴您自己找到了解决方法,也感谢您在此分享经验。
WIN32_LEAN_AND_MEAN是windows用来排除很少使用的头文件,从而加速程序生成的过程。
您使用了#define WIN32_LEAN_AND_MEAN之后,某些头文件被排除了,这间接解决了多个头文件中重复定义的问题。
(如果您觉得我的回复对您有帮助,麻烦将其标记为答案,谢谢!)
Damon Zheng [MSFT]
MSDN Community Support | Feedback to us- Editado Damon ZhengMicrosoft contingent staff, Moderator segunda-feira, 3 de setembro de 2012 10:53
- Marcado como Resposta Damon ZhengMicrosoft contingent staff, Moderator sexta-feira, 7 de setembro de 2012 02:41
-
您好,
我暂时将自己的答复也标记为答案,如果您不同意我的回复,请取消答复标记,并提出您的质疑。
谢谢!
Damon Zheng [MSFT]
MSDN Community Support | Feedback to us