zoukankan      html  css  js  c++  java
  • DLL类型

    对于Windows平台而言,dll一共有4种类型:

    下图是关于project setting上的rules:

     

     确定要使用的 DLL 类型

    如果 DLL 不使用 MFC,则使用 Visual C++ 生成非 MFC Win32 DLL。将 DLL(静态或动态)链接到 MFC 会占用大量磁盘空间和内存。除非 DLL 确实使用 MFC,否则不要链接到 MFC。

    如 果 DLL 要使用 MFC,且将由 MFC 或非 MFC 应用程序使用,则必须生成动态链接到 MFC 的规则 DLL 或静态链接到 MFC 的规则 DLL。大部分情况下可能需要使用动态链接到 MFC 的规则 DLL,因为这种 DLL 的文件大小要小得多,且使用共享 MFC 版本会节省大量内存。如果静态链接到 MFC,则由于 DLL 会加载自己的私有 MFC 库代码副本,DLL 的文件大小会较大,且有可能占用额外的内存。

    生成动态链接到 MFC 的 DLL 要比生成静态链接到 MFC 的 DLL 快,因为前者不需链接 MFC 本身。在链接器必须压缩调试信息的调试版本中尤其如此。通过与已经包含调试信息的 DLL 链接,DLL 中将只有很少的调试信息需要压缩。

    动 态链接到 MFC 的一个缺点是必须用 DLL 发布共享 DLL:Mfcx0.dll 和 Msvcrt.dll(或类似的文件)。MFC DLL 可随便重新发布,但仍必须在安装程序中安装 DLL。另外必须交付 Msvcrt.dll,它包含程序和 MFC DLL 本身都要使用的 C 运行时库。

    如果 DLL 仅由 MFC 可执行文件使用,则可以选择生成规则 DLL 或扩展 DLL。如果 DLL 实现从现有 MFC 类派生的可重用类,或如果需要在应用程序和 DLL 之间传递 MFC 派生的对象,则必须生成扩展 DLL。

    如果 DLL 动态链接到 MFC,则可能要用 DLL 重新发布 MFC DLL。当在多个可执行文件之间共享类库以节省磁盘空间和最小化内存使用时,此结构尤其有用。

    在 4.0 版之前,Visual C++ 仅支持两种使用 MFC 的 DLL 类型:USRDLL 和 AFXDLL。静态链接到 MFC 的规则 DLL 具有与原来的 USRDLL 相同的特性。MFC 扩展 DLL 具有与原来的 AFXDLL 相同的特性。

    初始化MFC extension dll

    #include "stdafx.h"
    #include <afxdllx.h>

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    static AFX_EXTENSION_MODULE PROJNAMEDLL = { NULL, NULL };

    extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    if (dwReason == DLL_PROCESS_ATTACH)
    {
    TRACE0("PROJNAME.DLL Initializing!\n");

    // Extension DLL one-time initialization
    AfxInitExtensionModule(PROJNAMEDLL,
    hInstance);

    // Insert this DLL into the resource chain
    new CDynLinkLibrary(Dll3DLL);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    TRACE0("PROJNAME.DLL Terminating!\n");
    }
    return 1; // ok
    }

    具体细节可以访问以下地址:

    MSDN:http://msdn.microsoft.com/zh-cn/library/9se914de(VS.80).aspx

    网易上系列文章:

  • 相关阅读:
    数组的练习
    java基础类和对象
    字符串的练习
    二分查找算法
    Python-charle+fiddler
    python-week1-postman+jemter-soapUI
    OBB盒的实现
    Bounding volume
    OSG动画学习
    OSG 自定义数据类型 关键帧动画
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/1435173.html
Copyright © 2011-2022 走看看