动态链接库学习(四)
Win16 DLL与Win32 DLL之间的区别
如果您已为 Windows 3.x 生成了 16 位 DLL,应发现生成 32 位 DLL 更为方便。编译器提供了更直接的支持,它可以省去 DLL 创建过程中的若干步骤。Win16 DLL 和 Win32 DLL 之间的具体差异包括:
-
没有必须要链接的单独的启动模块。DLL 启动序列直接由链接到 DLL 中的 C/C++ 运行时库代码处理。
-
运行时库代码通过调用适当的构造函数初始化任何静态非本地 C++ 对象。每个进程均获取自己的所有 DLL 静态数据(包括对象)的副本。
-
不再需要 LibMain 或 WEP 函数(Windows 退出过程)。在何处为 DLL 添加初始化代码和终止代码取决于所生成的 DLL 类型。提供 DllMain 而非 LibMain,而当进入和退出时都要调用前者。
-
可以直接在源代码中导入或导出符号。如果使用 __declspec(dllexport) 属性(类似于 Windows 3.x 中的 __export),则无需为导出使用单独的模块定义文件。
-
使用 __declspec(dllimport) 从 DLL 导入数据、对象和函数的可执行文件使编辑器生成更有效的代码。
-
对用 atexit 注册的例程的调用执行时间可以不同。
-
除了 Win32 非 MFC DLL 外,Visual C++ 还提供了三种 MFC DLL 类型。
posted on 2011-05-27 16:37 ActiveChange 阅读(127) 评论(0) 编辑 收藏 举报