2014-01-17 111 views
0

我有一个项目,我一直在努力一段时间,并定期收到似乎来自Windows包含模糊符号错误。它们通常与.net命名空间相关。该项目包括托管和非托管C++代码,我最近决定从使用文本文件登录到通过ADO在非托管类中使用SQL服务器。在类的报头我使用命名空间confilcts .NET C++

#import <C:\\Program Files\\Common Files\\System\\ado\\msado15.dll> rename("EOF", "AdoNSEOF") 

由MS所建议 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms675103(v=vs.85).aspx

在ADO带来。这将编译孤立罚款,但在管理部分包括,当我得到这样的错误:

3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(216) : error C2872: 'IDataObject' : ambiguous symbol 
3>  could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject' 
3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(216) : error C2872: 'IDataObject' : ambiguous symbol 
3>  could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject' 
3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(246) : error C2872: 'IDropTarget' : ambiguous symbol 
3>  could be 'c:\program files\microsoft sdks\windows\v6.0a\include\oleidl.h(3328) : IDropTarget' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDropTarget' 
3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(246) : error C2872: 'IDropTarget' : ambiguous symbol 
3>  could be 'c:\program files\microsoft sdks\windows\v6.0a\include\oleidl.h(3328) : IDropTarget' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDropTarget' 
3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(771) : error C2872: 'IMessageFilter' : ambiguous symbol 
3>  could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6328) : IMessageFilter' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IMessageFilter' 
3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(771) : error C2872: 'IMessageFilter' : ambiguous symbol 
3>  could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6328) : IMessageFilter' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IMessageFilter' 
3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(1041) : error C2872: 'IServiceProvider' : ambiguous symbol 
3>  could be 'c:\program files\microsoft sdks\windows\v6.0a\include\servprov.h(103) : IServiceProvider' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider' 
3>c:\program files (x86)\microsoft visual studio 9.0\vc\include\comdefsp.h(1041) : error C2872: 'IServiceProvider' : ambiguous symbol 
3>  could be 'c:\program files\microsoft sdks\windows\v6.0a\include\servprov.h(103) : IServiceProvider' 
3>  or  'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider' 

是否有某种方式来封装冲突的命名空间,这样它不会影响.NET?问题一直在出现,这里似乎有些我不完全明白的地方。 非常感谢, 布鲁斯。

回答

0

您需要删除一些使用的名称空间声明并使用那里的全名来避免冲突。