.动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。编译时不被引入。
使用:
-----将DLL文件放入系统目录下;
-----放入指定目录,在环境变量中添加引用;
-----将DLL与可执行文件放同一个目录下。
动态链接库文件的扩展名一般是dll, 也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用 程序直接或间接调用。
2. LIB静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。
静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
使用lib文件:
1)包含一个对应的头文件告知编译器lib文件里面的具体内容;
2)设置lib文件允许编译器去查找已经编译好的二进制代码。
---- 在工程选项-〉link-〉Object/Library Module中加入hello.lib
---- 可以在源代码中加入一行指令 : #pragma comment(lib, "hello.lib")
类型:
----任意个obj文件的集合;
----另外一种类型的lib,它不是obj文件的集合,即里面不含有实际的实现,它只是提供动态链接到DLL所需要的信息。
3.一个DLL工程和一个EXE工程的差别有两点:
1 EXE的入口函数是main或者WinMain,而DLL的入口函数是DllMain ;
2 EXE的入口函数标志着一段处理流程的开始,函数退出后,流程处理就结束了,而DLL的入口函数对系统来说,只是路过,加载DLL的时候路过一次,卸载 DLL的时候又路过一次,你可以在DLL入口函数中做流程处理,但这通常不是DLL的目的,DLL的目的是要导出函数供其它DLL或 EXE使用。
4.TLB
TLB是组件服务的接口,而DLL包含了接口和实现。TLB文件是一个说明文件,通过TLB文件,用户可以得知你的DLL文件中的COM接口以及常量等的信息,这样一来用户才知道你的DLL中有什么接口与常量等,用户才能用你的接口,当然了,如果你的COM接口只想自己使用,你可以不做TLB文件告诉其他人这些信息了。 有些情况下,比如客户方需要远程调用,那么在客户机上部署dll是没有意义的,因为dll所需的环境在服务器上,而客户只需要dll里的接口定义部分,这个时候tlb就派上用场了,在同一台计算机上得话,引用TLB和DLL没什么不同。TLB文件虽然可以单独发行,但也可以作为组件DLL中的一个资源随组件DLL一起发行.
使用:
-----将DLL文件放入系统目录下;
-----放入指定目录,在环境变量中添加引用;
-----将DLL与可执行文件放同一个目录下。
动态链接库文件的扩展名一般是dll, 也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用 程序直接或间接调用。
2. LIB静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。
静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
使用lib文件:
1)包含一个对应的头文件告知编译器lib文件里面的具体内容;
2)设置lib文件允许编译器去查找已经编译好的二进制代码。
---- 在工程选项-〉link-〉Object/Library Module中加入hello.lib
---- 可以在源代码中加入一行指令 : #pragma comment(lib, "hello.lib")
类型:
----任意个obj文件的集合;
----另外一种类型的lib,它不是obj文件的集合,即里面不含有实际的实现,它只是提供动态链接到DLL所需要的信息。
3.一个DLL工程和一个EXE工程的差别有两点:
1 EXE的入口函数是main或者WinMain,而DLL的入口函数是DllMain ;
2 EXE的入口函数标志着一段处理流程的开始,函数退出后,流程处理就结束了,而DLL的入口函数对系统来说,只是路过,加载DLL的时候路过一次,卸载 DLL的时候又路过一次,你可以在DLL入口函数中做流程处理,但这通常不是DLL的目的,DLL的目的是要导出函数供其它DLL或 EXE使用。
4.TLB
TLB是组件服务的接口,而DLL包含了接口和实现。TLB文件是一个说明文件,通过TLB文件,用户可以得知你的DLL文件中的COM接口以及常量等的信息,这样一来用户才知道你的DLL中有什么接口与常量等,用户才能用你的接口,当然了,如果你的COM接口只想自己使用,你可以不做TLB文件告诉其他人这些信息了。 有些情况下,比如客户方需要远程调用,那么在客户机上部署dll是没有意义的,因为dll所需的环境在服务器上,而客户只需要dll里的接口定义部分,这个时候tlb就派上用场了,在同一台计算机上得话,引用TLB和DLL没什么不同。TLB文件虽然可以单独发行,但也可以作为组件DLL中的一个资源随组件DLL一起发行.