【问题标题】:How to handle multiple imports that have the same namespace?如何处理具有相同命名空间的多个导入?
【发布时间】:2020-08-02 10:20:45
【问题描述】:

我正在开发一个 C++ 命令行应用程序,它是一个组件对象模型 (COM) 客户端。有两种 COM 服务器实现,我想在我的程序中同时支持它们(可通过应用程序参数选择)。

两台服务器都使用同一个命名空间 OmniRig,所以一切都会发生冲突。我试图将它们分成单独的类以避免冲突,但这没有用。是否可以同时支持这两个 COM 服务器,我将如何去做?

OmniRigV1.h:

#include "OmniRigBase.h"

#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe"
using namespace OmniRig;

class OmniRigV1 : public OmniRigBase {...}

OmniRigV2.h:

#include "OmniRigBase.h"

#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe"
using namespace OmniRig;

class OmniRigV2 : public OmniRigBase {...}

main.cpp:

int main(int argc, char* argv[])
{
    ProgramOptions options(argc, argv);
    OmniRigBase* omnirig;
    switch (options.getOmnirigVersion()) {
        case OmniRigVersion::OmniRigVersion1:
            omnirig = new OmniRigV1(options);
            break;
        case OmniRigVersion::OmniRigVersion2:
            omnirig = new OmniRigV2(options);
            break;
        default:
            exit(E_OPTION_OMNIRIG_VERSION);
    }
...

完整代码位于: https://github.com/cniesen/IcomClockOmniRig/tree/adf7ce1b0ef716ec2f72d50bffbada4e811a52cf/src

【问题讨论】:

  • #import 指令有 rename_namespace 选项。
  • @IgorTandetnik,成功了。非常感谢。要添加答案吗?

标签: c++ windows visual-c++ com importerror


【解决方案1】:

正如 cmets 中提到的Ingor,我需要将rename_namespace 选项与#import 指令一起使用:

#import "C:\Program Files (x86)\Afreet\OmniRig\OmniRig.exe" rename_namespace("OmniRig1")

#import "C:\Program Files (x86)\Omni-Rig V2\omnirig2.exe" rename_namespace("OmniRig2")

现在可以使用适当的名称访问每个实现,例如 OmniRig1::OmniRigXOmniRig2::OmniRigX

感谢 Ingor。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2019-12-20
    • 2011-12-01
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多