VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1817|回复: 20

[原创] 在WIN32 DLL中使用MFC库的一个办法

[复制链接]
79_avatar_middle
在线会员 发表于 2015-12-19 14:00:40 | 显示全部楼层 |阅读模式
大家有没有遇见利用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,不知所措,现在我说一下办法:


一、修改预编译头文件(stdafx.h)

在stdafx.h文件中添加下面代码,包含一些MFC的头文件,这些可以在一个MFC工程中复制过来



1 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS    // 某些 CString 构造函数将为显式的
2
3 #include <afxwin.h>         // MFC 核心组件和标准组件
4 #include <afxext.h>         // MFC 扩展
5
6 #ifndef _AFX_NO_OLE_SUPPORT
7 #include <afxole.h>         // MFC OLE 类
8 #include <afxodlgs.h>       // MFC OLE 对话框类
9 #include <afxdisp.h>        // MFC 自动化类
10 #endif // _AFX_NO_OLE_SUPPORT
11
12 #ifndef _AFX_NO_DB_SUPPORT
13 #include <afxdb.h>            // MFC ODBC 数据库类
14 #endif // _AFX_NO_DB_SUPPORT
15
16 #ifndef _AFX_NO_DAO_SUPPORT
17 #include <afxdao.h>            // MFC DAO 数据库类
18 #endif // _AFX_NO_DAO_SUPPORT
19
20 #include <afxdtctl.h>        // MFC 对 Internet Explorer 4 公共控件的支持
21 #ifndef _AFX_NO_AFXCMN_SUPPORT
22 #include <afxcmn.h>            // MFC 对 Windows 公共控件的支持
23 #endif // _AFX_NO_AFXCMN_SUPPORT



二、修改编译配置

我使有的是VS2003

1、项目->属性->常规->MFC的使用->在静态库中使用MFC(动态或静态都可以)

2、链接器->输入->

    因为编译的时候会因为链接的顺序问题导致链接错误,所以这里要改两个LIB的链接顺序

    先在‘忽略指定库中’忽略掉这两个DLL,分别是uafxcw.lib和libcpmt.lib,如果是DEBUG工程,还需要填入libcmt.lib

    再在'附加依赖项'中以uafxcw.lib libcpmt.lib的顺序填入



三、在你的主文件中加入代码

在最前面加入



#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define new DEBUG_NEW

/////////////////////////////////////////////////////////////////////////////
// global data

// The following symbol used to force inclusion of this module for _USRDLL
#ifdef _X86_
extern "C" { int _afxForceUSRDLL; }
#else
extern "C" { int __afxForceUSRDLL; }
#endif


这样不用从CWinApp中派生一个类再外部定义来使用MFC的入口点,可以直接使用原来的写好的DllMain入口点



只是在链接那一块还是出了几个错误,
error LNK2005: "private: __thiscall type_info::type_info。。。

最后用的:
附加依赖项:msvcrtd.lib LIBCMTD.lib
忽略特定库:LIBCMTD.lib;msvcrtd.lib

编译通过了,MFC的类编译器也认识了

评分

参与人数 4驿站币 +6 热心值 +6 收起 理由
65_avatar_small 编程者 + 2 + 2 很给力!
01_avatar_small 天下第一 + 1 + 1
10_avatar_small cmx006 + 1 + 1 赞一个!
88_avatar_small 寂寞江湖 + 2 + 2 很给力!

查看全部评分





上一篇:线程分离的定时器一点经验
下一篇:如何在vc6.0中使用duilib库
88_avatar_middle
online_vip 发表于 2015-12-19 20:57:44 | 显示全部楼层
使用MFC库的一个办法
06_avatar_middle
在线会员 发表于 2015-12-21 09:31:06 | 显示全部楼层
使用MFC库的一个办法
10_avatar_middle
在线会员 发表于 2015-12-27 11:44:22 | 显示全部楼层
xxfx学习啊
27_avatar_middle
在线会员 发表于 2015-12-30 16:37:13 | 显示全部楼层
使用MFC库的一个办法
26_avatar_middle
在线会员 发表于 2015-12-31 20:02:31 | 显示全部楼层
为了方便要用到MFC的一些库
84_avatar_middle
在线会员 发表于 2015-12-31 20:55:43 | 显示全部楼层
很给力!很给力!!
48_avatar_middle
在线会员 发表于 2016-1-1 14:00:33 | 显示全部楼层
我也想看看!!
72_avatar_middle
在线会员 发表于 2016-1-11 15:20:32 | 显示全部楼层
好帖啊爱爱爱
17_avatar_middle
在线会员 发表于 2016-1-12 08:39:57 | 显示全部楼层
新手不会  顶起来!
23_avatar_middle
online_vip 发表于 2016-1-12 20:51:47 | 显示全部楼层
来看看,支持      
01_avatar_middle
在线会员 发表于 2016-3-16 08:46:09 | 显示全部楼层
谢谢分享
20_avatar_middle
online_vip 发表于 2016-3-16 09:49:28 | 显示全部楼层
谢谢分享
12_avatar_middle
在线会员 发表于 2016-4-5 10:50:27 | 显示全部楼层
什么办法。。
82_avatar_middle
online_vip 发表于 2016-6-13 21:03:35 | 显示全部楼层
看一下这个  能在DLL里用不
65_avatar_middle
donate_vip 发表于 2016-8-7 14:06:51 | 显示全部楼层
谢谢分享
62_avatar_middle
在线会员 发表于 2017-3-16 16:11:54 | 显示全部楼层
谢谢分享,希望能解决
84_avatar_middle
在线会员 发表于 2017-3-31 10:58:01 | 显示全部楼层
看看收藏一下
32_avatar_middle
在线会员 发表于 2017-5-17 21:30:57 | 显示全部楼层
谢谢分享 学习了
96_avatar_middle
在线会员 发表于 2017-7-12 09:37:54 | 显示全部楼层
LZ 我想知道,这种dll Regular DLLs Statically Linked to MFC的dll工程,怎么做,现在是编译成功,运行异常。派生的控件,不想用扩展dll
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-19 11:33

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表