zl程序教程

您现在的位置是:首页 >  其它

当前栏目

在WIN32 DLL中使用MFC

mfc dll Win32 使用
2023-09-27 14:29:33 时间
最近用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的类编译器也认识了

 

 

谢谢观看!


这个问题可能是Manifest 引起的,因此我们可以通过修改项目- 属性- 清单工具- 输入输出,把 嵌入清单 选 否 ,然后编译、链接、运行即可。
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改为...
C++ DLL导出类 知识大全 在公司使用C++ 做开发,公司的大拿搭了一个C++的跨平台开发框架。在C++开发领域我还是个新手,有很多知识要学,比如Dll库的开发。    参考了很多这方面的资料,对DLL有一个基本全面的了解。有一个问题让我有点困惑,普通的导入导出C++类的方式都是使用_declspec(dllexport) /_declspec(dllimport)来导入导出类,但是在公司的开发中我们没有导入导出,而是定义了一些只有纯虚函数的抽象类,然后定义了一个工厂类,将这个工厂类注册到框架的服务中心中,使用时从服务中心拿到这个工厂类,就可以创建Dll中的其它类。
div "author-img" src="https://ucc.alicdn.com/avatar/img_97daf7e22667ed72a8e4b28695f84bbc.jpg?x-oss-process=image/resize,h_150,m_lfit" />