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

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

时间: 2024-10-02 22:20:05

MFC规则动态库的相关文章

MFC 关于动态库DLL引用CDialog的关键点

,在MFC的应用开发中,经常会遇到将部分功能以DLL动态库的方式进行封装调用,在调用的过程中应注意以下几点 1 设置当前资源句柄 在DLL中查找资源文件时,如需要将当前资源文件的handle设置成dll模块的hinstance. AfxGetResourceHandle() 查看当前资源句柄 AfxSetResourceHandle() 设置当前资源句柄 GetModuleHandle(“dll文件名”); 例示: HINSTANCE h1 = AfxGetResourceHandle(); H

MFC扩展动态库

一.概述

MFC的亚博静态库.lib、体育动态库.dll以及Unicode库示例

MFC亚博静态库使用下列体育命名约定: uAFXcWd.LIB . 库命名约定的说明符如下: 说明符 值和含义u (n) ANSI 或 (u)Unicodec 创建的计划类型:c=alld d=debug版本; release版本略去说明符默认值为生成用于 Intel 平台的调试版本 windows ANSI 应用程序的静态库:NAFXCWD.Lib. 下表列出的所有库是在 \ atlmfc \ lib 目录中包含预生成的静态库. 静态链接库命名约定: 库 说明NAFXCW.LIB MFC 静态

动态库(非MFC动态库)

一.C语言动态库 1.创建C语言动态库,并封装函数: 1)创建新工程:Win32 Dynamic-Link Library 2)添加SourceFiles文件:Cdll.c Cdll.c中的内容: //创建C的动态库 //_declspec(dllexport)声明导出 _declspec(dllexport)int Cdll_add(int add1,int add2){     return add1+add2; } _declspec(dllexport)int Cdll_sub(int 

VC++6.0 动态库的创建与调用(非MFC的dll)

非MFC动态库的创建... 一个lib.cpp,一个lib.h /*lib.h*/ #ifndef LIB_H #define LIB_H //声明add为dll的导出函数. extern "C" int _declspec(dllexport)add(int x,int y); #endif 也可以加上def文件 ; lib.def : 导出DLL函数 LIBRARY DllTestDef EXPORTS add @ 1 非MFc动态库的调用 1.静态调用 //静态的调用dll动态库

72)MFC测试动态共享库

动态共享库: 首先我建立一个新的动态库: 然后不选择空项目了,因为我们普通的cpp文件 入口是main  win32入口是winmain  那么这个动态库的入口在哪里  我们就是为了看一看: 出来这样的结果: 然后我们看看他是怎么进入这个函数的,就是这个case,下面我们新建一个MFC项目: 发现一个点: 然后 我们修改那个动态库中的代码: 趁着我的动态库是加黑的  所以直接生成就行了. 因为  我们将动态库和MFC项目放到衣蛾解决方案下的  所以  就不用导入 动态库的.h文件  dll文件和

Linux链接库二(动态库,静态库,库命名规则,建立个没有版本号的软连接文件)

http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http://www.jb51.net/article/34990.htm 1.概念和区别:    静态库就是在编译过程中一些目标文件的集合.静态库在程序链接的时候使用,链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中.一旦链接完成,在执行程序的时候就不需要静态库了.     由于每个使用静态库的

(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)

上一节中讲解了非MFC DLL,本节将介绍如何创建MFC规则DLL及使用MFC规则DLL的方法. 一.MFC规则DLL概述 MFC规则DLL的概念体现在两方面: (1)它是MFC的 "是MFC的"意味着可以在这种DLL的内部使用MFC: (2)它是规则的 "是规则的"意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以使用MFC,但是其与应用程序的接口不能是MFC.而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的

【转】分析Linux和windows动态库

原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系 统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系统的动态库由 于格式不同,在需要不同操作系统调用时需要进行动态库程序移植.本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Lin