zoukankan      html  css  js  c++  java
  • ATL写的DLL中调用MFC对话框

    项目需求,制作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里也出现这个错误,然后去网上搜一搜,才发现犯了这个低级错误,

    狂汗……

  • 相关阅读:
    MySQL设置用户
    tensorflow学习笔记12
    tensorflow学习笔记11
    tensorflow学习笔记10
    tensorflow学习笔记9
    博雅机器学习十讲10
    博雅机器学习十讲9
    博雅机器学习十讲8
    博雅机器学习十讲7
    博雅机器学习十讲6
  • 原文地址:https://www.cnblogs.com/k1988/p/2165724.html
Copyright © 2011-2022 走看看