库有两种:动态链接库和静态链接库。

一,使用动态链接库:

通过项目——属性——配置属性——常规——项目默认值——配置类型下,选择动态库(.dll)选项

这样会生成.lib和.dll两种文件。

只是该.lib文件不包含程序实现文件,只包含函数入口信息,因此必须与对于生成的.dll文件配套使用。

使用时又分为静态链接和动态链接。

静态链接需要.h、.lib、.dll三种文件,使用时导入这三个文件即可。

动态链接只需要.dll文件,使用时通过LoadLibrary加载获取函数入口地址。

二、使用静态链接库:

通过项目——属性——配置属性——常规——项目默认值——配置类型下,选择静态链接库(.lib)选项

这样只生成.lib文件。

该lib文件不仅包含程序入口地址,也包含程序实现代码,与上面的.lib文件是不一样的。

使用时只需要.h,.lib文件即可。

参考文献:https://blog.csdn.net/piaoxuezhong/article/details/64127436

扩展dll生成DllMain()函数,这是与非扩展dll的区别:

三、MFC扩展DLL导出类

1.在dll类名前面添加AFX_EXT_CLASS;

2.将生成的dll文件放在调用类的当前目录中

3.包含进.h文件和生成的.lib文件。

注意:不需要再添加_AFXEXT预处理器,也不需要添加项目依赖项。

四、MFC扩展类导出全局变量

1.在.cpp中定义全局变量:int a=5;

2.在.h头文件中声明其为全局变量:extern AFX_EXT_DATA int a;

3.剩下的就和导出类2,3步一样了。

五、MFC扩展类导出全局函数

1.在函数前面添加AFX_EXPORT就可以了,如:AFX_EXPORT void show();

全体注意:上面三个宏AFX_EXT_CLASS、AFX_EXT_DATA、AFX_EXPORT都可以用__declspec(dllexport)替换,已经验证过了。

所有的过程没有用到dllimport这个关键词,不用再有这个思维误区了。

MFC实现普通DLL的更多相关文章

  1. C# 调用C++/MFC写的dll

    C#调用C++的非托管类的dll其实很简单基本就是固定的调用格式. dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可.然后就是添加一个类添加一个方法.方法排头固 ...

  2. MFC的规则DLL与扩展DLL

    一.MFC规则DLL     MFC规则DLL可以在该dll内部使用MFC,但是与应用程序的接口不能是MFC的.能够被所有支持dll的编程语言所写的应用程序使用,当然也包括使用MFC创建的应用程序.在 ...

  3. MFC的规则DLL中资源使用的问题

    今天刚刚做了一个静态链接到MFC的规则dll,即“Use MFC in a static library“,该dll用来显示一个窗体.然后在一个mfc可执行程序A.exe中调用这个dll文件,可以正常 ...

  4. MFC-创建MFC图形界面dll

    创建MFC图形界面dll 概述: 利用MFC的DLL框架,制作带有图形界面的dll,可以实现很多功能. 流程: 选择静态链接MFC DLL:以免有的库没有. 采用该框架创建的MFC,会自动生产一个MF ...

  5. MFC创建动态链接库DLL并调用方法详解

    实例一: 1.创建一个动态链接库工程,如login_dll. 2.在原工程头文件或者新建头文件如showdlg.h定义动态链接库的导出函数,代码如下: #include "stdafx.h& ...

  6. MFC中的DLL、LIb文件的创建、使用

     动态链接库Dynamic-Linked Lib 的创建与使用 动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软 ...

  7. MFC下的DLL编程学习

    1.DLL库与LIB库对比: 静态链接库Lib(Static Link Library),是在编译的链接阶段将库函数嵌入到应用程序的内部.如果系统中运行的多个应用程序都包含所用到的公共库函数,则必然造 ...

  8. VC++:创建,调用MFC动态链接库(扩展DLL)

    概述 DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类. 仓库的发展史经历了"无库" ---& ...

  9. MFC 丢失MSVCR120D.dll 丢失mfc120ud.dll

随机推荐

  1. js读取json包装的map集合

    后台 Map<String,Integer> map = new HashMap<>(); map.put("你好1", 1); map.put(" ...

  2. C语言基础知识【循环】

    C 循环1.有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推.编程语言提供了更为复杂执行路径的多种控制结构.循环语句允许我 ...

  3. PHP中使用POST发送请求的常用方式

    前提概要: 在PHP进行项目开发过程中,使用post发送请求的情况很多,以下总结了项目中主要用的两种方式. 总结下: 在我接触到的项目中用到第二种情况较多,比如写:短信接口.....总体来说比较简单便 ...

  4. hdu4847:Wow! Such Doge!(字符串匹配)

    题目:hdu4847:Wow! Such Doge! 题目大意:在给出的段落里面找出"doge"出现的次数.大写和小写都能够. 解题思路:字符串匹配问题,能够在之前将字母都转换成统 ...

  5. EF中几个重要的类:ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager

    ObjectContext封装 .NET Framework 和数据库之间的连接.此类用作“创建”.“读取”.“更新”和“删除”操作的网关. ObjectContext 类为主类,用于与作为对象(这些 ...

  6. jvm的字符串池

    1 jvm中是有专门的字符串池的内存空间的,这块空间和栈和堆不同. 2 String s = "string constant"; 这个时候,如果string pool中没有&qu ...

  7. 【python】-- 类的装饰器方法、特殊成员方法

    装饰器方法 类的另外的特性,装饰器方法:静态方法(staticmethod).类方法(classmethod).属性方法(property) 一.静态方法 在方法名前加上@staticmethod装饰 ...

  8. 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现

    我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端(地址:http://blog.csdn.net/ouyang_pen ...

  9. sublime运行Python

    1.首先安装Python 我这里安装的是Python的3.7版本. 这里有两种安装方式 第一种: 默认路径安装,勾选添加到path复选框(这种情况,sublime可以直接运行Python了) 第二种: ...

  10. 使用inotify实现linux系统下的目录变化监控

    近期,有个项目须要及时删除Nginx服务生成的缓存文件,因为不是非常了解Nginx缓存生成的策略,在网上也沒有细致找,经过大家讨论,终于希望引入liunx的inotify功能,监控某个liunx文件夹 ...