像很多地方一样,我的工作场所有遗留代码以及更现代的应用程序。例如,我们有一个仍然使用 Microsoft Fortran77 编译器的服务器应用程序。应用程序中较旧的部分是为 Visual Studio 6 C 编译器编写的,最近出现了一些使用 VS .Net 2008 C++ 编写新库的案例。程序/库有许多不同的机制来相互消费/通信,包括静态链接、共享内存(Windows 内存映射文件)、名称管道和 TCP 套接字。
是什么阻止了 C# 应用程序能够使用任何旧库,例如用过程语言编写的 Fortran77 库之一?
如果我的 C# 应用程序理解 Fortan77 或 C 库的文件格式并且能够找到它想要的过程调用,它是否可以编组托管对象,调用该过程并解组结果?
如果我将 .so 库文件从 Linux 复制到 Windows,并且我的 C# 应用程序理解文件格式,它是否可以调用该库中的函数?
我认为答案与初始化每个库/程序所需的各种 Fortran、C 等运行时有关。如果是这样,那么从根本上说,这些运行时是否与 CLR 大体相似(在 CLR 的情况下,它们具有不同的功能,例如内存管理等)?
编辑:
以另一种方式提出我的问题。如果外星人进来并给了我一个二进制库文件和文件格式规范,我可以从 C# 中使用它吗?