在WIN32 DLL中使用MFC
mfc dll Win32 使用
2023-09-27 14:29:33 时间
最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记
一、修改预编译头文件(stdafx.
这个问题可能是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" />
最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记
一、修改预编译头文件(stdafx.h)
在stdafx.h文件中添加下面代码,包含一些MFC的头文件,这些可以在一个MFC工程中复制过来
![复制代码](https://yqfile.alicdn.com/img_51e409b11aa51c150090697429a953ed.gif)
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
![复制代码](https://yqfile.alicdn.com/img_51e409b11aa51c150090697429a953ed.gif)
二、修改编译配置
我使有的是VS2003
1、项目- 属性- 常规- MFC的使用- 在静态库中使用MFC(动态或静态都可以)
2、链接器- 输入-
因为编译的时候会因为链接的顺序问题导致链接错误,所以这里要改两个LIB的链接顺序
先在‘忽略指定库中’忽略掉这两个DLL,分别是uafxcw.lib和libcpmt.lib,如果是DEBUG工程,还需要填入libcmt.lib
再在附加依赖项中以uafxcw.lib libcpmt.lib的顺序填入
三、在你的主文件中加入代码
在最前面加入
![复制代码](https://yqfile.alicdn.com/img_51e409b11aa51c150090697429a953ed.gif)
#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
![复制代码](https://yqfile.alicdn.com/img_51e409b11aa51c150090697429a953ed.gif)
这样不用从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" />
相关文章
- 第1章 Hello MFC
- MFC 程序调用控制台 & 隐藏窗体
- MFC中挂起线程和恢复线程
- MFC VC 双缓冲绘图基本原理与实现,详细解释
- MFC中Windows窗口消息循环及多线程之间关系
- MFC添加自定义消息及处理函数
- MFC多线程各种线程用法 .
- MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
- MFC中创建和使用线程的方法
- mfc 创建线程函数AfxBeginThread,线程中访问mfc控件
- MFC关于JPG图片显示处理的几个方式
- MFC学习之下载hex文件到单片机程序代码(串口通信)
- VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)