在WIN32 DLL中使用MFC

最近用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_SUPPORT11 12 #ifndef _AFX_NO_DB_SUPPORT13 #include <afxdb.h>            // MFC ODBC 数据库类14 #endif // _AFX_NO_DB_SUPPORT15 16 #ifndef _AFX_NO_DAO_SUPPORT17 #include <afxdao.h>            // MFC DAO 数据库类18 #endif // _AFX_NO_DAO_SUPPORT19 20 #include <afxdtctl.h>        // MFC 对 Internet Explorer 4 公共控件的支持21 #ifndef _AFX_NO_AFXCMN_SUPPORT22 #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_FILEstatic 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; }#elseextern "C" { int __afxForceUSRDLL; }#endif 

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

 

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

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

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

 

 

谢谢观看!

时间: 2024-09-20 00:35:23

在WIN32 DLL中使用MFC的相关文章

在WIN32 DLL中使用MFC库遇到的问题

今天写了一个DLL,DLL中用到的一个类里用到的MSXML的COM组件,所以在DLL中要包含afx.h头文件,也就不可避免的要用到MFC的类库了,但在编译时出现了错误:mfcs42d.lib(dllmodul.obj) : error LNK2005:_DllMain@12 already defined in NetDriverConfig.obj, 在http://topic.csdn.net/t/20010911/10/281452.html 处的贴子里找到了以下回答,试了一个原来是文件里

Win32 DLL和MFC DLL 中封装对话框

现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32   DLL和MFC   DLL两个方面来分析并解决这个问题.           1.Win32   DLL               在Win32   DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件.然后使用DialogBox或者CreateDialog这两个函数(或相同作用的其它函数)来创建对话框,并定义

在DLL中使用资源

现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题. 1.Win32 DLL 在Win32 DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件.然后使用DialogBox或者CreateDialog这两个函数(或相同作用的其它函数)来创建对话框,并定义你自己的对话框回调函数处理对话框收到的消息.下面通过一个具体实例

console中应用MFC类的方法

  1.添加#include <afx.h>或者<afxwin.h> 这时会报错1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #d

win32程序中简单应用mfc

今日写程序在win32中用CRect发现报错,突然想起来.要引入mfc库.想重新建立一个工程添加对mfc的支持.发现选项不能选.查资料后发现. 在win32程序中简单应用mfc库,只需要简单的引入<afx.h>就好了.注意这个时候如果出来 #ifdef _DLL #ifndef _AFXDLL #error Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please

一步一步实现MFC扩展DLL中导出类和对话框

如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWizard(dll),在右边Project name下输入ExportClass,单击"下一步": 选择Mfc Exte

win32中使用MFC类库

能用, #include <afx.h> 在SDK程序中使用MFC中的辅助类 由于MFC中的辅助类,如CFileDialog,CFileFind,CString等使用起来非常的方便 如果用API来完成相应的工作,则需要自己完成大量的重复工作,使用MFC的辅助类 可以节省大量的开发时间,具体方法如下: 1.加入相应的头文件 由于在SDK程序中一定要包含windows.h头文件,所以在使用MFC中的类时, 如加入afx.h一类的头文件会有一个提示与windows.h相冲突,解决的办法是, 去掉wi

我是新人,怎样实现中mfc中实现对自己DLL中回调函数的接收

问题描述 我是新人,怎样实现中mfc中实现对自己DLL中回调函数的接收 我在消息函数中执行自己的DLL中的函数.正确的话是系统会执行该函数的响应函数,可在MFC中我的响应函数未被执行,这是为什么?? 解决方案 有什么提示错误?dll没有正确加载? 解决方案二: 没有提示什么,只是我调试根本没有进入过响应函数,程序还可以正常运行 解决方案三: 没有提示什么,只是我调试根本没有进入过响应函数,程序还可以正常运行

vc++-ocx在dll中的调用(关于vc里的mfc)

问题描述 ocx在dll中的调用(关于vc里的mfc) dll里边封装了一个对话框,现在在这个对话框里边insert activex control一个ocx控件,调用这个dll,对话框弹不出来, 若没有加入这个ocx,调用dll会弹出对话框 解决方案 很像是里面发生异常了,可以试试debugview看能抓到异常信息不.