在WIN32 DLL中使用MFC

简介: 最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记   一、修改预编译头文件(stdafx.

最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在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月前
|
Windows
DLL介绍
DLL介绍
164 0
DLL介绍
|
9月前
|
开发框架 .NET C#
JsonRequestBehavior不存在问题,JsonRequestBehavior属于哪个dll
JsonRequestBehavior不存在问题,JsonRequestBehavior属于哪个dll
解决Visual Studio 2005中找不到MFC80UD.dll的问题
今天用VS2005建立一个MFC项目,在运行时遇到下面这个找不到MFC80UD.dll的问题。 这个问题可能是Manifest 引起的,因此我们可以通过修改项目->属性->清单工具->输入输出,把“嵌入清单”选“否”,然后编译、链接、运行即可。
1197 0
|
Web App开发 安全
|
开发工具 C++ API
win32中使用MFC类库
在Project->Setting->General 中选Use MFC in a Shared DLL或者 Use MFC in static Library并把project->Setting->C/C++ 中的Use runing-time library 由Single-Threaded改为...
1272 0