动态链接库学习(四)

Win16 DLL与Win32 DLL之间的区别

如果您已为 Windows 3.x 生成了 16 位 DLL,应发现生成 32 位 DLL 更为方便。编译器提供了更直接的支持,它可以省去 DLL 创建过程中的若干步骤。Win16 DLL 和 Win32 DLL 之间的具体差异包括:

  • 没有必须要链接的单独的启动模块。DLL 启动序列直接由链接到 DLL 中的 C/C++ 运行时库代码处理。

  • 运行时库代码通过调用适当的构造函数初始化任何静态非本地 C++ 对象。每个进程均获取自己的所有 DLL 静态数据(包括对象)的副本。

  • 不再需要 LibMainWEP 函数(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编辑  收藏  举报

导航