DLL可以与其他编程语言一起使用吗?

Can a DLL be used with other Programming Languages?

本文关键字:一起 编程语言 其他 DLL      更新时间:2023-10-16

什么编程语言可以支持相同的dll?

我刚买了一个捆绑了3个api的产品:JAVA, .NET, c++

在每个api文件夹中,我发现。net和c++文件夹上的dll文件,而java文件夹上的jar文件。我的问题是,我可以在不同的语言集成dll吗?我已经尝试使用jni在java中实现一个dll,它工作了。我读到dll支持多语言程序,但为什么不同的dll与。net和c++一起使用?

任何答案都将是感激的。由于

从c#(或其他。net语言)调用c++ DLL是完全可能的,但这将是编写p/Invoke代码的问题(这是困难的)。

为方便起见,API的作者为您编写了一个本机c#包装器,您可以像使用任何其他c#类一样使用它。

(上面假设"真正的"DLL是c++的——它实际上可能是c#的,而c++ DLL是用c++/CLI编写的包装器。实际上并没有改变多少逻辑)

同样地,编写JNI接口是乏味而繁琐的——最好只做一次(对),而不是回答所有的支持电话"我如何……"

根据维基百科,截至2016年11月15日,

动态链接库(DLL)是微软在Windows和OS/2操作系统中对共享库概念的实现。这些库通常具有文件扩展名DLL、OCX(用于包含ActiveX控件的库)或DRV(用于遗留系统驱动程序)。dll的文件格式与Windows的EXE文件格式相同,即32位和64位Windows为可移植可执行文件(Portable Executable, PE), 16位Windows为新可执行文件(New Executable, NE)。与exe一样,dll可以以任何组合方式包含代码、数据和资源。

这意味着您可以将不同的东西(包括代码)存储到DLL中。DLL是在运行时加载的。您可以根据语言支持的特性加载dll。
您可以通过以下方式实现:-

    在Java中通过JNI接口。
  • c++
  • 任何支持调用dll的语言。

另一点需要注意的是,DLL必须事先针对将要调用它的操作系统进行编译。作为一个类比,不同的操作系统对dll有不同的文件扩展名/概念。例如,以下工作流是有效的,
用c++编译DLL -> 存储在磁盘 -> 从任何其他语言调用DLL,如c#/c++/Java