项目需求,制作BHO并且要求有个按钮。BHO使用ATL实现,按钮我想使用MFC的dialg上放置按钮的方式。1、先将ATL工程改成支持
MFC,见:http://support.microsoft.com/default.aspx?scid=kb;en-us;q173974,或是在创建工程是直接选上suppot MFC。
2、添加Dialog资源,然后在继承于IObjectWithSiteImpl接口的BHO类里添加上Dialog成员,并在某处使用Dialog.Create初使化,
在SetSite中或其它地方使用ShowWindow切换显示dialog。
几点注意的地方:
1、如果此 DLL 相对于 MFC DLL 是动态链接的,
// 则从此 DLL 导出的任何调入
// MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
// 该函数的最前面。
//
// 例如:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
//
// 此宏先于任何 MFC 调用
// 出现在每个函数中十分重要。这意味着
// 它必须作为函数中的第一个语句
// 出现,甚至先于所有对象变量声明,
// 这是因为它们的构造函数可能生成 MFC
// DLL 调用。
2、#include <afxwin.h>和#include <atlbase.h>要注意先后顺序,否则会出现
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>。
参见:http://www.wangchao.net.cn/bbsdetail_64574.html
几乎不用MFC,导致我花了三个小时在研究一个断言,而这个断言是因为我在调用ShowWindow之前没有进行初使化(doModal(模式
)或者Create(无模式))导致的,而我还以为是我在ATL中使用MFC的方法不对,最后主管一语中的,他说你先找个普通的DLL然后试
图在其中调用一个对话框看那边是否正常。结果我在普通的DLL里也出现这个错误,然后去网上搜一搜,才发现犯了这个低级错误,
狂汗……
分享到:
相关推荐
在本案例中,“ATL封装MFC对话框”是指将MFC中的对话框类集成到ATL工程中,这样可以利用ATL的轻量化特性,同时利用MFC对话框的强大功能。这种做法在某些情况下特别有用,比如当你需要在非MFC项目中使用MFC对话框,...
在ATL服务器DLL中嵌入MFC GUI接口意味着将MFC的窗口和控件类引入到ATL项目中,这样可以在ATL组件中提供图形用户界面。这通常涉及到以下几个步骤: 1. 创建ATL项目:使用Visual Studio中的ATL项目模板创建一个新的...
当我们需要在一个ATL动态链接库(DLL)中调用WTL的功能时,我们需要理解这两个库的基本原理和它们之间的交互方式。 首先,ATL是一个轻量级的库,它提供了创建COM对象的模板类。COM(Component Object Model)是微软的...
在给定的“atl.dll”文件中,我们可以理解它是一个动态链接库,包含了实现ATL功能的函数和类。 **什么是动态链接库(DLL)?** DLL是动态链接库的缩写,是Windows操作系统中的一种共享库机制。它允许多个应用程序...
总结,实现MFC扩展DLL中导出类和对话框涉及到创建DLL项目,定义导出类和对话框类,实现类方法,以及在客户端应用程序中加载和使用DLL。这允许我们把复杂的逻辑封装到DLL中,使得代码更易于管理和重用。在实际开发中...
在IT行业中,MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序的开发。...通过学习和理解这个示例,开发者可以更好地掌握在实际项目中利用MFC和ATL进行组件开发的技巧。
在ATL中使用MFC的类,主要是为了获取MFC库中的丰富功能,如窗口、对话框、文档/视图架构、数据库支持等。MFC提供了许多方便的类,使得处理Windows编程的许多复杂任务变得更加容易。ATL与MFC的结合可以简化代码,提高...
迅雷atl71.dll文件是迅雷软件运行过程中不可或缺的一个动态链接库(Dynamic Link Library,简称DLL)文件。DLL文件在Windows操作系统中扮演着至关重要的角色,它们包含了可被多个程序共享的代码和数据,有助于优化...
### VS2008中生成DLL项目及调用详解 #### 一、概述 本文将详细介绍如何在Visual Studio 2008 (简称VS2008)中创建DLL项目并进行调用的过程。首先解释DLL(动态链接库)与静态库的概念及其区别,接着介绍在VS2008中...
- **共享 MFC**:DLL 中不包含 MFC 库函数,需要额外安装 MFC 动态链接库才能使用。 - **静态 MFC**:DLL 内部包含了 MFC 库函数,可以脱离 MFC 动态链接库独立使用。 - **扩展 DLL (Extension DLL)** - DLL 中...
6. kernel32.dll、user32.dll、gdi32.dll:这些都是Windows API的基础库,MFC程序在底层会调用这些库中的函数进行系统级别的操作。 当MFC程序在没有这些必要的DLL文件的环境中运行时,会报错并提示找不到特定的模块...
以下将详细介绍几种常见的DLL调用方式及其应用场景。 1. **静态链接**: 静态链接是在编译阶段将DLL中的函数和数据与应用程序合并的。在生成可执行文件时,编译器会将DLL中的函数引用替换为实际的函数地址。这种...
5. **调试与部署**:在开发过程中,需要确保DLL与调用程序使用相同版本的MFC库。在部署时,如果使用的是MFC动态库,还需要确保目标系统安装了相应的运行时库。 描述中提到的“几种导出方法”可能指的是以下几种常见...
这些头文件是MFC源代码的接口,使开发者能够在自己的代码中调用MFC的类和成员函数。 "vcpackages"可能包含Visual Studio 2005的项目和解决方案文件,这些文件用于管理和构建MFC相关工程。VCPackages是Visual Studio...
在创建输入法的过程中,我们需要利用MFC中的窗口类、消息机制以及事件处理来实现用户界面和交互逻辑。 在手写中文输入法的实现中,首要任务是设计用户界面,这通常包含一个画板区域供用户手写输入,以及一个候选词...
4. **ActiveX调用DLL**:重点内容,将前面学习的DLL调用和ActiveX控件结合起来,实现在Web页面上通过ActiveX控件调用DLL功能。 通过这个教程,你将能熟练掌握在VS2013环境下进行DLL和ActiveX开发,这对于开发需要与...
在本例中,C++被用来创建OCX控件,这需要对MFC(Microsoft Foundation Classes)或者ATL(Active Template Library)有深入的理解,因为这些库提供了创建COM组件的接口。 创建OCX控件的过程中,你需要定义控件的...
以上就是如何在MFC中使用ATL控件的详细步骤。在实际开发过程中,你可能需要根据具体需求对这些步骤进行调整。同时,阅读《How-to-use-an-ATL-control-with-MFC.pdf》和解压后的《TempMonitor.zip》文件,会为你提供...
具体来说,MFC中与图形相关的知识点包括: 1. **CWnd类**:作为所有窗口类的基础,CWnd提供了创建、管理和操作窗口的基本方法。 2. **CDC类**:表示设备上下文,是进行图形绘制的基础,可以用来画线、填充形状、...
【atl-ActiveX-dll-inf-cab-web调用(总结篇)】 这篇文章是对利用C++进行ActiveX控件和DLL的开发以及将其嵌入到Web网页中的技术进行的总结。ActiveX是微软的一种技术,允许在不同的应用程序之间共享组件,而DLL...