Com visualc&x2B+;编译错误C2871-<;名称空间>;:具有此名称的命名空间不存在

Com visualc&x2B+;编译错误C2871-<;名称空间>;:具有此名称的命名空间不存在,com,interop,Com,Interop,我正在尝试创建一个ManagedRapper dll,该dll可以从MFC应用程序调用,而不会使用/clr开关编译。在测试MFC的标题中,我声明了以下内容: #import "ManagedProxy.tlb" using namespace ManagedProxy; 尝试编译测试MFC应用程序时,出现错误C2871:“ManagedProxy”:不存在具有此名称的命名空间。我确信这一点直到昨天才奏效。如果指定了错误的tlb文件名,则会出现编译错误C1083,这表明tlb文件加载正确 为什么

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

#import "ManagedProxy.tlb"
using namespace ManagedProxy;
尝试编译测试MFC应用程序时,出现错误C2871:“ManagedProxy”:不存在具有此名称的命名空间。我确信这一点直到昨天才奏效。如果指定了错误的tlb文件名,则会出现编译错误C1083,这表明tlb文件加载正确

为什么VisualStudio现在在抱怨,为什么它以前能工作

添加:

我刚刚发现,在我将名称空间更改为ManagedProxy之后,我的代理停止工作。我已经重新编译了托管项目,并且本机应用程序还有一个额外的包含路径,即托管项目的调试文件夹,因此它应该引用最新的tlb,但它不是。我尝试了一条通向tlb的绝对路径,清理并重建了项目,但没有成功

为什么tlb不是名称空间更改

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

有人请帮忙


TIA。

导入时可以重命名名称空间

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

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

谢谢您的提示。救了我一天。我还发现regasm完全忽略了包含类和接口的名称空间,而是在为COM注册程序集时使用程序集名称作为名称空间。此外,如果程序集名称使用点表示法,如CompanyName.AssemblyName.Purpose,则会出现无法注册程序集的错误。Visual Studio需要以管理员身份运行。仅供其他人参考。有人知道为什么我的一些标有ComVisible(true)的界面在浏览为COM注册的托管对象时没有显示吗?这是一个很好的提示!当我导入一个具有分层名称空间的托管C#程序集时,这也有所帮助。C++编译器不喜欢使用命名空间“Maul.Mub”,但对MaMror的重命名工作了!它们都被标记为公共的。它们不显示在对象浏览器中,但幸运的是可以从C++中消费。