DLL开发总结
一概论
DLL(Dynamic Linkable Library),你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量,函数。
静态库和动态库都是共享代码的方式,它们的区别请参见我的上一篇博文。
-
DLL的编制与具体的变成语言及编译器无关
只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以
相互调用,譬如Windows提供的系统DLL,在任何开发环境中都能被调用,不在乎其实VisualBasics、Visual C++还是Delphi。
-
VC动态链接库的分类
VisualC++支持三种DLL,它们分别是Non-MFCDLL(非MFC动态库)、MFC
Regular DLL(MFC规则的DLL)、MFCExtension DLL(MFC扩展DLL)。
非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC编写的应用程序所调用;MFC规则DLL包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,她们只能被用MFC类库所编写程序所调用。
二导出函数
DLL中导出函数的声明有两种方式:一种是在函数声明中加上__declspec(dllexport),另外一种是采用模块定义(.def)文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。
①extern “C” int __declspec(dllexport) add(int x, int y);怎样使用可以参见上一篇博客——静态库与动态库的区别。
②LIBRARY dllTest
EXPORTS
add @1
.def文件的规则为:
①LIBRARY语句说明.def文件相应的DLL;
②EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数后面加@n,表示要导出函数的序号为n
③.def文件中的注释由每个注释行开始处的分号指定,且注释不能与语句同行。
使用.def文件在使用时,可以这样