MFC application 链接静态库的问题

Th_Pk_Ying 2010-07-02 02:49:12
一个MFC application 链接了一个静态库,静态库中有一个CMyDialog,从CDialog继承。我在application中使用CMyDialog,当在application中添加了CMyDialog dlg; dlg.DoModol();的代码时,启动程序,在application的InitInstance函数中,会调用AfxOleInit,跟踪这个函数发现afxContextIsDLL是true,也就是认为module是一个dll,(如果不加CMyDialog dlg代码,是false)所以函数就返回了,后面的工作都不做了,(包括new COleMessageFilter)继续执行InitInstance中后面的代码,到了COleMessageFilter* pFilter = AfxOleGetMessageFilter();pFilter->EnableBusyDialog(FALSE);pFilter->EnableNotRespondingDialog(FALSE);。此时,返回的pFilter指针就变为空的了,不知道为什么exe的工程使用了lib的代码以后会被认作是dll,请高手指点。
...全文
127 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Th_Pk_Ying 2010-07-05
  • 打赏
  • 举报
回复
其实我想知道的是为什么使用了lib中的代码以后,afxOleInit中途就返回true了
jameshooo 2010-07-05
  • 打赏
  • 举报
回复
具体原因很难说,应该是静态库中的全局初始化代码冲掉了EXE中初始化的系统设置。检查一下静态库代码,有关全局执行一次的代码都注释掉,除了全局/静态变量的初始化。
dvlinker 2010-07-05
  • 打赏
  • 举报
回复
帮忙顶一个~
BlueMap 2010-07-03
  • 打赏
  • 举报
回复
最好将创建对话框的操作作为一个函数导出,个人分析你程序出错的原因是因为没有把对话框资源导出来,所以不能显示对话框(你没有说这个,但是应该没错吧?)。
你如果要将对话框导出,只能做为MFC扩展动态库导出,导出时还要注意将对话框的资源导出来,调用时你要知道对话框中每一个变量的意思,假如因为某种需要你修改了对话框,那么对对话框的所有调用都要修改。如果你将调用对话框的操作放到一个函数中并将该函数导出,那么这个动态库可以作为MFC标准动态库,当你修改对话框时该函数的参数可以保持不变,因此所有调用该对话框的地方都不需要改变(设计模式中的工厂模式)。
cnzdgs 2010-07-02
  • 打赏
  • 举报
回复
AfxOleInit之类的函数最好在应用程序初始化函数中调用,不要放在静态库里面。
踏实每一步 2010-07-02
  • 打赏
  • 举报
回复
AfxOleInit是当你连接库时,会调用初始化com环境,创建com的消息队列。
这些代码就是创建com的消息队列机制
COleMessageFilter* pFilter = AfxOleGetMessageFilter();pFilter->EnableBusyDialog(FALSE);pFilter->EnableNotRespondingDialog(FALSE);
而并不是把exe工程认作了dll
Th_Pk_Ying 2010-07-02
  • 打赏
  • 举报
回复
没有人知道吗,自己顶了
King030609 2010-07-02
  • 打赏
  • 举报
回复
Th_Pk_Ying 2010-07-02
  • 打赏
  • 举报
回复
我觉得不是这个原因
雪影 2010-07-02
  • 打赏
  • 举报
回复
CMyDialog最好导出一个Show函数

在Show函数中调用下面代码
AFX_MANAGE_STATE(AfxGetStaticModuleState());

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧