m0_60797829 2021-11-30 02:21 采纳率: 61.1%
浏览 33
已结题

DLL文件内部存储的函数究竟是什么编程语言的函数?

网上的资料说,DLL是动态链接库,它与静态链接库对应。二者都是库文件。
库文件的本质是大量已经被前人定义的函数和类的集合。
问题是,这些个函数,是什么语言的函数,类又是什么语言的类呢?
在Java领域,前人写的Jar包往往就是库文件。由于包内部都是class字节码文件,所以可以轻易判断出,以Jar包为实体的库文件,包含的类和方法一点是Java语言的类和函数,而不是C++的类和函数。
那么,对于Java以外的语言,库文件都不是以Jar包为实体的了。
在仅仅有一个DLL文件摆在面前的时候,如何知道这个文件内部包含的函数和类是对应着哪一个语言的呢?

  • 写回答

2条回答 默认 最新

  • 冰思雨 2021-11-30 10:33
    关注

    Jar文件是采用zip算法的归档文件,它可以将磁盘中的某个目录的目录结构和文件进行压缩归档。
    由于是 Java 首先使用的 jar 这个扩展名,所以,大多数情况下,jar 包中的 class 文件是由 Java 语言开发的源代码编译之后生成的。
    但是,并不是所有的jar包,都是由Java由编译打包生成的。 Scala语言也可以编译生成 class 文件,也可以打包成 jar 包。
    所以,不能武断说,我拿到一个Jar包,它里面存放的就是 Java 语言的类和函数。 这个认知是有些狭隘的。
    为啥这么说呢,因为,class文件被称为字节码文件,字节码文件的文件结构已经被开放出来,其他语言如果愿意的话,某些语言也可以自己开发编译器,生成 class 文件,然后,在 JVM 虚拟机上面运行。同理,由于 class 字节码文件的结构已经被开放,JVM 也可以由多个厂家自行设计,并不是只有 Oracle/Sun 公司才生产 JVM。


    通过上面的论述,我们可以理解到,库文件的主要目的是为了共享,可以由多种开发语言来生成。
    通过库文件的类型来推断它原始的开发语言,这貌似并没有什么意义,你只要学会怎样使用这些库文件就可以了。
    比如,Java 也可以调用 DLL 文件。C/C++/.net/python等语言都可以调用DLL。


    DLL文件是windows系统的特有的库文件,使用了动态连接技术。
    DLL文件,可以由C/C++/汇编/.net/VB等等多门语言编译生成。
    正如Jar包一样,无法通过Jar推断是Java语言生成还是Scala语言生成,DLL文件也无法逆推开发语言。
    当然,我们可以通过Jar包蛛丝马迹来推断,但是,不能百分百正确;同样的DLL文件也可以通过蛛丝马迹来推断,但是,不能百分百正确。
    绝大多数的常用的Jar包都由Java编译生成,绝大多数的常用的DLL文件都有C++编译生成。


    再次强调一下,根据我的认知,生成库文件的编程语言其实并不太重要,重要的是,你能用你现在掌握的开发语言使用这些库文件。
    因为,库文件的存在根本意义就是分享,避免重复造轮子。在这基础之上才是库文件的其他意义。
    能被其他语言或者其他程序所使用,才是最重要的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月10日
  • 已采纳回答 12月2日
  • 创建了问题 11月30日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效