Visual C ++编译错误C2871 - <namespace>:具有此名称的命名空间不存在</namespace>

时间:2011-07-05 15:37:20

标签: com interop

我正在尝试创建一个ManagedWrapper dll,可以从不使用/ clr开关编译的MFC应用程序调用。在我的测试MFC的标题中,我声明了以下内容:

#import "ManagedProxy.tlb"
using namespace ManagedProxy;

当我尝试编译测试MFC应用程序时,我收到错误C2871:'ManagedProxy':具有此名称的命名空间不存在。我相信这最近一直有效。如果我指定了错误的tlb文件名,我会收到编译错误C1083,这表明正确加载了tlb文件。

为什么Visual Studio现在在抱怨,为什么之前有效?

增加:

我发现在将命名空间更改为ManagedProxy之后我的代理停止了工作。我已经重新编译了Managed项目,并且本机应用程序有一个Additional Include Path,即托管项目的Debug文件夹,因此它应该引用最新的tlb,但事实并非如此。我尝试了tlb的绝对路径,清理并重建了项目而没有运气。

为什么tlb不是命名空间改变?

加成 使用对象浏览器查看TLB中的内容,并将命名空间ManagedProxy以某种方式重命名为其他内容。我也缺少几个接口,尽管它们标有ComVisible(true)。

有人请帮忙....

TIA。

2 个答案:

答案 0 :(得分:2)

您可以在导入时重命名命名空间。

#import "ManagedProxy.tlb" rename_namespace("ManagedProxy")

答案 1 :(得分:0)

未显示的界面可能未标记为公开。