我可以拥有跨平台的跨技术解决方案吗?

时间:2009-02-28 10:46:32

标签: c++ soap rpc xml-rpc

我们有一个旧的应用程序,它可以从其他应用程序调用 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,因为我正在添加新方法,并增强代码,以便用户可以轻松调用方法。

最诚挚的问候,

3 个答案:

答案 0 :(得分:2)

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

如果做不到这一点,你可以实现Fortran的流媒体接口(读取和写入标准输出),只需管道输入和输入 - 我已经完成了将交互式ISPF Fortran应用程序快速移植到PC上。


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

答案 1 :(得分:2)

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

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

客观化的界面是否对您的应用程序有意义?如果没有,没有理由打扰制作C ++包装器。

对于RPC,为什么没有一个简单的带共享内存的消息传递接口就足​​够了?

答案 2 :(得分:0)

SOAP,XML-RPC等通常用于计算机到计算机的通信,这是你想要的吗?或者这只是在一个计算机上运行?

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

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