zoukankan      html  css  js  c++  java
  • Win32动态链接库和MFC 动态链接库

     

    通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。

    此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您可能具有一个工资计算程序,而税率每年都会更改。当这些更改被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。

    Windows操作系统中的一些作为 DLL 实现的文件

    ·ActiveX 控件 (.ocx) 文件

    ActiveX控件的一个示例是日历控件,它使您可以从日历中选择日期。

    ·控制面板 (.cpl) 文件

    .cpl 文件的一个示例是位于控制面板中的项。每个项都是一个专用 DLL。

    ·设备驱动程序(.drv) 文件

    设备驱动程序的一个示例是控制打印到打印机的打印机驱动程序。

    dll在程序中用 loadlibrary ,实际管理用rundll32.exe

    Rundll32.exe与Rundll.exe的区别就在于前者是用于32位的链结库,后者是用于16位的链结库。rundll32.exe是专门用来调用dll文件的程序

    当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数。这两种链接方法是加载时动态链接和运行时动态链接。


    运行时


    在运行时动态链接中,应用程序调用 LoadLibrary 函数或 LoadLibraryEx 函数以在运行时加载 DLL。成功加载 DLL 后,可以使用 GetProcAddress 函数获得要调用的导出的 DLL

     函数的地址。在使用运行时动态链接时,无需使用导入库文件。


    Win32 DLL的特点


    Win32 DLL与 Win16 DLL有很大的区别,这主要是由操作系统的设计思想决定的。一方面,在Win16 DLL中程序入口点函数和出口点函数(LibMain和WEP)是分别实现的;

    而在Win32 DLL中却由同一函数DLLMain来实现。无论何时,当一个进程或线程载入和卸载DLL时,都要调用该函数,它的原型是


    BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved);


    DLL:

             Win32在任何程序中都可以使用的API库;

             1、 规则DLL     MFC扩展DLL   (在一般DLL上扩展MFC库的DLL)

              MFC扩展的DLL正确叫法是扩展MFC库的DLL ,MFC建工程会生成def模块定义文件,WIN32中建要手动建def文件也可以用_declspec声名。

    #include <afxwin.h>
    #include <afxdllx.h>
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    static AFX_EXTENSION_MODULE HJ89xAPIDLL = { NULL, NULL };
    
    extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)


     

             2、 MFC规则的DLL (使用MFC时可以在共享的DLL中也可以使用静态的lib库)

    这类DLL使用的是MFC规则,

              MFC规则的类不是C++标准类,而是统一使用VC++类规则

              有 来连接句柄

               BEGIN_MESSAGE_MAP(CHJx89APIMApp, CWinApp)
               END_MESSAGE_MAP()      

                这些宏定义被转换成C++代码,被编译器编译    

               MFC规则的DLL是MFC规则给外部暴露的接口都是Cwinapp ,MFC应用都是

  • 相关阅读:
    可能会搞砸你的面试:你知道一个TCP连接上能发起多少个HTTP请求吗?
    iOS笔记055
    iOS笔记053- Quartz2D-练习
    iOS笔记052- Quartz2D-绘图
    IOS笔记051-手势使用
    IOS笔记050-事件处理
    IOS笔记049-UITabBarController
    IOS笔记048-数据存储
    IOS笔记047-代理传值和block传值
    IOS笔记046-UIApplication/导航控制器
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3243930.html
Copyright © 2011-2022 走看看