DinS Written on 2017/6/6
本文将探讨如何在lib里面加入MFC的元素。这可能是一种特殊的技术,用处有限,一般而言使用带MFC的dll是更好的选择,具体可见《带MFC的dll》。
那么能不能够制作带MFC的Lib呢?答案是可以的,不过并不是从MFC开始制作,而是控制台。实际上控制台经过设置也是能够使用MFC类的,制作带MFC的Lib也是从这里开始
一、制作lib
首先新建一个控制台项目,注意选项
新建项目后空空如也,没有任何实质性的东西,但是最重要的东西已经给出来了,即ReadMe
看文档是好习惯。 注意圈出来的那几行,根据这个就能够实现带MFC的Lib。(点击这里看大图)
在开始真正的制作前首先需要看一下项目属性。
经过测试只有选择共享DLl才能够成功调用制作的lib。
注意字符集的问题,制作的lib和调用lib的程序,其字符集必须一致。
接下来让我们按照ReadMe的指示一步步制作Lib
首先添加资源文件
制作一个对话框
完成这一步后程序自动增加了resource.h和LibWithMFC.rc
对照ReadMe现在还差一个含有“resource.h”的“LibWithMFC.h”
添加头文件
确保名字是正确的
至此ReadMe就完成了一大半了,接下来就是常规MFC编程了
使用类向导添加一个对话框
既然是制作Lib,必然需要导出点东西。
在.h中添加一个函数声明
添加.cpp文件
实现函数,就是一个简单的弹出窗体
注意包含了哪些头文件
然后就可以生成项目了
注:如果遇到报错IDD_…未声明的标识符,可以在那个对话框.h中包含resource.h
可以看到还是很大的
二、调用lib
接下来就是调用该lib了。让我们再次回顾ReadMe,上面说“如果将 rc 文件添加到静态库,可能会遇到一些困难”,“可以通过将库的 .rc 文件包含到父项目的 .rc 文件来解决此问题”
这句话非常重要。
新建一个MFC项目
接下来是重点,把如下的四件套拷贝到该工程中
为什么是这四个?
既然是调用lib,lib文件肯定要有
需要函数接口,所以LibWithMFC.h也要有
既然引入了LibWithMFC.h,不要忘记其本身包含了resource.h,所以也要拉进来
那.rc呢?做了这么多库从来没见过拉rc文件进来的
这就是ReadMe文件的提示,如果没有.rc程序可以通过编译但是运行不正常
如果没看ReadMe绝对想不到是rc的问题,这再次说明了文档的重要性
设置工程属性导入lib,省略
然后需要把rc文件导入到工程里
是这个效果
至此导入的工作完成了,可以调用函数了
像正常的lib一样使用
第一步包含头文件
第二步直接调用函数,比DLL简单
效果图: