• 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);  //恢复状态

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

  • 相关阅读:
    C# 扩展方法使用
    C# 程序集安装与卸载
    C#截取当前活动窗体的图片
    DateTime格式
    c# asp.net 多数组索引的解决方法
    关于DataSet中Relations的应用
    datalist 分页
    ASP.NET(C#) Repeater分页的实现
    asp.net 六大对象之Request、Response
    什么是DOM
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6921377.html
Copyright © 2020-2023  润新知