【问题标题】:Can I have a cross-platform cross-technology solution?我可以有一个跨平台跨技术的解决方案吗?
【发布时间】:2010-10-10 12:23:58
【问题描述】:

我们有一个旧应用程序,它有一个 FORTRAN API 可以从其他应用程序调用。一段时间后,他们为 FORTRAN API 构建了一个 ( C ) 包装器。然后我现在正在构建一个 c++ 包装器,并带有一些数据处理,用于 C API。

所以我在考虑构建可以从任何编程语言调用的 API 的最佳方式是什么。

现在我打算从我的 c++ API 中构建 RPC 服务器。然后任何使用任何编程语言的客户端都可以调用它。

我发现XML-RPC 是一个不错的选择。但它需要 HTTP 服务器 进行连接。

问题是调用我们API的应用是桌面应用。而且我发现XML-RPC不能操作复杂的对象

SOAP 是一个好的解决方案吗?客户端可以轻松实现吗?

那么对于我的情况,最好的技术解决方案是什么?我应该使用哪种技术?

评论:我没有更改 Fortran API 和 C API 的权限。而且我需要 c++ API,因为我正在向它添加新方法,并增强代码以便用户可以轻松调用方法。

最好的问候,

【问题讨论】:

    标签: c++ soap rpc xml-rpc


    【解决方案1】:

    最好的方法是不用管它,只使用 C API。 几乎所有编程语言都可以直接调用 C API,因此没有理由创建包装器,除非特定语言的编程模型以不同的方式更有意义。

    要澄清我的意思,请查看 GTK+。它是一个 C API,几乎可以在任何语言中使用。包装器存在于面向对象的语言中,它们为 GTK+ API 提供纯 OOP 方法,因为考虑到 API 的领域,它对这些语言有意义。

    对象化接口对您的应用程序有意义吗?如果没有,没有理由费心制作 C++ 包装器。

    对于 RPC,为什么一个简单的共享内存的消息传递接口就不够用了?

    【讨论】:

    • 我不能直接调用 C 作为调用 fortran 的同样原因(见第一个答案中的评论)。所以,是的,对象化接口对我的应用程序有意义。以及您所说的带有共享内存的简单消息传递接口是什么意思,我该怎么做???
    • 大多数操作系统提供一个共享内存池,一个应用程序可以分配,另一个应用程序可以写入。您可以通过这种方式以类似队列的方式存储消息或对象。它可以与其他 RPC 机制类似地使用。
    【解决方案2】:

    任何体面的语言都有一个外来函数 API。直接调用 Fortran 函数即可。编译器文档将告诉您如何 - 在共享库中调用 Fortran 与在共享库中调用 C 非常相似,除了不同的编译器可能会将函数名规范化为小写或不使用小写,或者可能添加下划线。一些 FFI 可能需要一些 C 包装代码(例如 Java),但许多 FFI 可以只使用函数名称和参数类型以及要加载的库的名称。

    如果做不到这一点,您可以实现 Fortran 的流式接口(读取和写入标准输出)并将输入通过管道传输到它 - 我在将交互式 ISPF Fortran 应用程序快速移植到 PC 时已经这样做了。


    既然您想公开 C++ API 和扩展而不是 Fortran API,那么请查看 SWIG,它可以自动执行各种语言的流程,只要 C++ 不太复杂。

    【讨论】:

    • 我不能直接调用 Fortran 函数,因为现在我必须在我的 C++ API 中添加新方法、操作数据并将其以已知数据类型和数组的形式返回给用户。所以我不能在 FORTRAN API 中做这些改动,因为我没有 license 和源代码。
    【解决方案3】:

    SOAP、XML-RPC 等通常用于计算机之间的通信,这是你想要的吗?还是这一切都只是在一台计算机上运行?

    如果只是在一台计算机上,坚持使用 C API,大多数系统都可以使用它

    如果您将 C API 建模为 REST 样式的服务,那么您还可以为无法使用 C API 但只有一个系统可记录的应用程序提供 HTTP 服务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多