带MFC的lib

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简单

效果图: