能力值:
( LV2,RANK:10 )
|
-
-
26 楼
windows 标准的动态链接库是按 PASCAL(或__stdcall)调用规则输出函数的,但是,一般编译器在编译这种规则源程序的时候,会改变输出函数的名称。例如,如果你定义了一个准备供调用的函数Function(int , int),在无人为干预的情况下,在编译完成的dll中,输出的实际函数名将会变成“_Function@8”这个样子,如果用户按"Function(int , int)"的定义来调用这个dll的时候,就会因为找不到这个函数而出错,为了保持输出函数名称不变,在编译生成dll和lib库文件的时候才需要这个def文件,对 lib 和 dll 库文件中的输出函数名进行纠正。如果你的动态链接库没有特别指定按 PASCAL(_stdcall) 规则调用函数,编译器会按照缺省的 C 语言调用规则处理,函数名将不会有任何改变。因此,在这种情形下,根本就没必要使用 def 文件对输出函数名进行干预。总起来说,def文件主要用于编译 lib 和 dll 库文件的过程,2 个库文件一旦得到,def 文件便无用了。
“kernel32.lib”和“kernel32.dll”属于WindowsSDK,是微软专门提供给用户调用Win32API系统功能的接口,凡是需要调用库中系统功能的程序,只需要链接“kernel32.lib”就能实现和“kernel32.dll”动态链接。可以肯定地说,这两个库不属于 vc 系统,而 vc 里面之所以有这 2 个库也只是为用户调用 Win32API 提供方便而准备的。如果 vc 不提供这 2 个库,那么,用户恐怕就没有办法直接调用 kernel32.dll 中的Win32API 功能了!
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
如果 vc 不提供这 2 个库,那么,用户恐怕就没有办法直接调用 kernel32.dll 中的Win32API 功能了!
请问,为什么?
我知道,我们一般使用 kernel32.dll的函数,几乎不是以loadlibrary的方式,而是以静态链接。
所以需要kernel32.lib这个文件。
安装多个vc版本,会提供不同的kernel32.lib,
会不会引入新问题: 不同版本的的kernel32.lib, 和同一个kernel32.dll 进行搭配。
不会有问题吗?
一般安装一些开发包,比如sdk 这些包, 或者 vc开发工具后,
都会引入kernel32.lib。
我们程序发布的时候,肯定是不会发布kenrel32.dll。
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
kernel32.lib 只是一座桥,方便我们把自己的代码和微软的代码链接在一起,不管 kernel32.lib 怎么变,这个作用不发生一丝一毫的改变。可以这样说,不管什么开发系统,只要提供 kernel32.lib,都可以正常使用,而且用法完全一样。道理很简单,kernel32.dll 属于操作系统,而不属于任何开发系统。
|
|
|