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 请问这种量表怎么用spss量化分析(作为中介模型的因变量
  • ¥55 AD844 howland电流源如何驱动大额负载
  • ¥15 C++ /QT 内存权限的判断函数列举
  • ¥15 深度学习GFnet理解问题
  • ¥15 单细胞小提琴堆叠图代码
  • ¥50 升级strust2版本到2.3.15.1后使用ognl3.0.6.jar windows环境中没有问题,但部署到linux环境报错
  • ¥15 vue页面,node封装接口
  • ¥15 求TMS320F280039C工程模板!
  • ¥15 delphi+fastreport实现分组补空打印问题
  • ¥15 使用python把两台mysql数据库服务器数据导出和导入