zoukankan      html  css  js  c++  java
  • MFC规则动态库

    一、概述

      “是MFC的”意味着可以在这种DLL的内部调用MFC类库中的内容;“是规则的”意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以调用MFC类库,但是其与应用程序的接口不能是MFC,而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的派生类;规则DLL能够被所有支持DLL技术的语言所编写的应用程序调用,当然也包括使用MFC的应用程序。

    二、分类

      MFC规则动态库分为:

        ①作为静态链接的MFC规则DLL

          该DLL可与MFC类库静态链接,将所调用的MFC类库的代码直接生成在.dll文件中,因此该DLL不需要进行模块状态的切换;但该DLL中可能存在重复代码,文件较大

        ②作为动态链接的共享MFC规则DLL

          该DLL可以和调用它的可执行程序同时动态链接到MFC动态库和MFC扩展动态库,当执行程序调用了该DLL后又在其程序内部用资源句柄加载了MFC资源模板时,执行程序总是默认调用程序内部加载的MFC资源而不是该DLL中链接到的MFC资源,若该DLL和执行程序内部存在相同ID的资源,会导致资源重复问题使系统不能获得正确的资源,因此该DLL须进行模块状态切换,以确定指向的资源模板

        ①创建作为静态链接的MFC规则DLL:

          1)创建新工程:MFC AppWizard(dll)

            

            

            第一部分:选择DLL的类型:作为静态链接的MFC规则DLL、作为动态链接的共享MFC规则DLL、MFC扩展动态库

            第二部分:是否支持自动化技术,“自动”允许在一个程序中操控另一个程序或组件;是否支持Windows Sockets(网络通信),允许程序在TCP/IP网络上进行通信

            第三部分:是否由MFC向导自动在源代码中添加注释

          2)创建完成后自动在工作区生成工程,并包含了如下文件结构:

            

            

        ②创建作为动态链接的共享MFC规则DLL:

          模块状态切换的方法:

            方法一:在DLL接口函数中使用:AFX_MANAGE_STATE(AfxGetStaticModuleState());

               在接口函数退出后,恢复为执行程序内部资源句柄加载的资源

            方法二:  //状态变更

              HINSTANCE save_hInstance=AfxGetResourceHandle();  //获取当前资源模块句柄

              AfxSetResourceHandle(程序目前要使用的资源模块句柄);  //设置新的资源模块句柄

                    |--操作

              //状态还原

              AfxSetResourceHandle(save_hInstance);             //设置回原资源模块句柄

                    |--再操作,无须退出即恢复为原执行程序加载的资源

            方法三:在执行程序的调用资源模块句柄的函数中切换:

              //获取默认的执行程序自己加载的资源模块句柄

              HINSTANCE exe_hInstance = AfxGetResourceHandle(); 

              //获取包含所需资源模块句柄的共享MFC规则DLL库

              HINSTANCE dll_hInstance = GetModuleHandle("共享MFC规则DLL.dll"); 

              AfxSetResourceHandle(dll_hInstance);  //切换状态

                    |--操作

              AfxSetResourceHandle(exe_hInstance);  //恢复状态

                    |--再操作,即恢复为默认的执行程序自己加载的资源模块

  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6921377.html
Copyright © 2011-2022 走看看