3

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

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

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

我发现XML-RPC是一个很好的方法。但它需要HTTP 服务器进行连接。

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

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

那么适合我的情况的最佳技术解决方案是什么?我应该使用哪种技术?

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

此致,

4

3 回答 3

2

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

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

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

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

于 2009-02-28T20:16:42.093 回答
2

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

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


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

于 2009-02-28T11:35:13.657 回答
0

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

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

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

于 2009-02-28T13:32:05.373 回答