gpt4 book ai didi

c# - 理论上是否可以从 C# 访问任何库(也就是 PInvoke 在幕后做了什么)?

转载 作者:行者123 更新时间:2023-11-30 21:25:20 25 4
gpt4 key购买 nike

与我工作场所的许多地方一样,遗留代码与更现代的应用程序一起四处流动。例如,我们有一个仍然使用 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# 中使用它吗?

最佳答案

如果 DLL 是有效的 DLL,并且导出的函数使用众所周知的调用约定,那么只要您在 .NET 中获得正确的方法签名,即:正确的参数类型和返回类型,就应该没有问题。 CLR 不(也不能)关心库是用什么语言编写的。

至于 Linux 共享库,如果您有库的源代码,应该可以使用 Cygwin 或 MiniGW 为 Windows 编译它们。

关于c# - 理论上是否可以从 C# 访问任何库(也就是 PInvoke 在幕后做了什么)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com