网上的资料说,DLL是动态链接库,它与静态链接库对应。二者都是库文件。
库文件的本质是大量已经被前人定义的函数和类的集合。
问题是,这些个函数,是什么语言的函数,类又是什么语言的类呢?
在Java领域,前人写的Jar包往往就是库文件。由于包内部都是class字节码文件,所以可以轻易判断出,以Jar包为实体的库文件,包含的类和方法一点是Java语言的类和函数,而不是C++的类和函数。
那么,对于Java以外的语言,库文件都不是以Jar包为实体的了。
在仅仅有一个DLL文件摆在面前的时候,如何知道这个文件内部包含的函数和类是对应着哪一个语言的呢?
DLL文件内部存储的函数究竟是什么编程语言的函数?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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++编译生成。
再次强调一下,根据我的认知,生成库文件的编程语言其实并不太重要,重要的是,你能用你现在掌握的开发语言使用这些库文件。
因为,库文件的存在根本意义就是分享,避免重复造轮子。在这基础之上才是库文件的其他意义。
能被其他语言或者其他程序所使用,才是最重要的。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
- ¥20 网站后台使用极速模式非常的卡
- ¥20 Keil uVision5创建project没反应
- ¥15 mmseqs内存报错
- ¥15 vika文档如何与obsidian同步
- ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
- ¥15 陆空双模式无人机飞控设置
- ¥15 sentaurus lithography
- ¥100 求抖音ck号 或者提ck教程
- ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)