【问题标题】:Create C++ ATL COM nested namespaces like System namespace in .NET在 .NET 中创建 C++ ATL COM 嵌套命名空间,如 System 命名空间
【发布时间】:2012-10-30 06:56:45
【问题描述】:

我有几个 ATL COM 服务,并希望每个服务都有自己的命名空间,但位于一个基本命名空间下,就像 .NET 中的系统命名空间一样。

例如,如果 C# 项目要包含这些 COM 对象,则所有对象都将位于同一基本命名空间下:

using MyCompanyName.Terminator;
using MyCompanyName.Superman;
using MyCompanyName.Thor;

...相反,我目前拥有的是:

using Terminator;
using Superman;
using Thor;

...这是我不想要的。我希望能够在该基础下拥有一个基本命名空间和子命名空间。我不知道在创建 ATL 服务时如何执行此操作以及我需要修改什么来执行此操作。是我在 IDL 文件中修改的吗?

【问题讨论】:

  • 不,COM 自动化不支持这个。
  • @Hans 感谢您澄清这一点。

标签: com namespaces nested atl idl


【解决方案1】:

如果您以托管客户端为目标,则可以为它们提供命名空间!但是,由于 COM 与语言无关,因此您无法使用接口描述(类型库)提供命名空间。但是,无论何时创建托管包装程序集(实际上由客户端引用),它们都可以具有命名空间来寻址 RCW 对象。您要查找的关键字是Primary Interop Assemblies。这些是您作为原始库的供应商提供给客户参考的程序集。为了简化这一点:您正在做这项工作,当您添加对 COM 库的引用时,Visual Studio 会为您完成这项工作。您正在创建 interop assembly 并且客户没有引用类型库,而是您生成的程序集。使用tlbimp.exe 工具,可以使用/namespace 参数将RCW 类型封装在命名空间内。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多