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

时间:2016-11-15 07:02:16

标签: java c++ .net dll

哪种编程语言可以支持相同的dll?

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

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

任何答案都将不胜感激。谢谢

2 个答案:

答案 0 :(得分:2)

完全可以从C#(或其他.Net语言)调用C ++ DLL,但这样做是编写P / Invoke代码的问题(这很难)。

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

(上面假设"真正的" DLL是C ++ - 它实际上可能是C#,而C ++ DLL是用C ++ / CLI编写的包装。实际上并不是大大改变了逻辑。)

类似地编写JNI接口是繁琐而繁琐的 - 一次(右)更好,而不是回答所有支持电话"我如何......"

答案 1 :(得分:0)

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

  

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

这意味着您可以将包括代码在内的不同内容存储到DLL中。 DLL在运行时加载。您可以根据语言支持的功能加载DLL。
您可以通过以下方式执行此操作: -

  • 在Java中通过JNI接口。
  • C++
  • 支持调用DLL的任何其他语言。

需要注意的另一点是,必须为您将在之前调用它的操作系统编译DLL。不同的操作系统对DLL有不同的文件扩展名/概念作为类比 例如,以下工作流程有效,
用C ++编译DLL - > 存储在磁盘中 - > 从C#/ C ++ / Java

等任何其他语言调用您的DLL