代码之家  ›  专栏  ›  技术社区  ›  Tim

对跨平台进程间动态库绑定(即轻量级、高性能COM或CORBA)的C++包装器的推荐[关闭]

  •  9
  • Tim  · 技术社区  · 16 年前

    我们正在开发一个应用程序,它将有一个插件“架构”,允许应用程序的消费者提供他们自己的专有算法。(我们将基本上有一组解析器,并允许第三方提供自己的解析器)

    基本上,我们正在寻找一个简单的跨平台包装器:

    • 提供特定dll/.so到某个配置/名称的映射

    我认为这实际上只是对loadlibrary()的包装,方法调用导出。我们可以自己编写,但我们更愿意使用现有的代码,因为我们已经有了足够的代码。

    同样,吞吐量和性能非常重要。

    类似的问题有:

    Cross-platform alternative to COM

    C++ Cross Platform Dynamic Libraries; Linux and Windows

    这是针对非托管C++的,我们不能使用.NET。

    我们发现 Poco 非常适合我们的需要。作为奖金 This page

    这是一个简单的跨平台包装,我们需要Poco提供。实际上没有太多,但仍然节省了我们的时间和测试。在运行时没有额外的开销。

    2 回复  |  直到 9 年前
        1
  •  4
  •   lothar    16 年前

    ACE 库包含用于跨平台工作的动态库加载的包装器。 如果您想要比普通loadlibrary更舒适,请查看 TAO 王牌球。将corba与TAO结合使用是非常有效的,并且很有可能胜过任何自行构建的插件基础设施,特别是当您在进程调用中使用时,因为TAO优化了它们。

    ACE_DLL . 它围绕您提到的loadlibrary()提供了最基本的跨平台包装。

    在使用ACE_DLL和使用TAO之间是 service configuration framework

    执行此操作的代码如下所示:

    char const * const cpc_myClass = ACE_DYNAMIC_SERVICE_DIRECTIVE(
      "myclass",
      "dllname",
      "_make_MyClass",
      ""
    );
    result = ACE_Service_Config::process_directive(cpc_myClass);
    MyClass * p_obj = ACE_Dynamic_Service<MyClass>::instance ("myclass");
    p_obj->callAnyMethodYouLike();
    

    Here

    当使用直接策略时,对并置对象的方法调用成为对服务的直接调用,而无需检查POA的状态。

    如果正确使用道,你可能会惊讶于道是多么有效。我建议创建一个简单的概念证明并进行测量。

        2
  •  3
  •   Tim    16 年前
    推荐文章