导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

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,请高手指点。
...全文
98 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Th_Pk_Ying 2010-07-05
其实我想知道的是为什么使用了lib中的代码以后,afxOleInit中途就返回true了
回复
jameshooo 2010-07-05
具体原因很难说,应该是静态库中的全局初始化代码冲掉了EXE中初始化的系统设置。检查一下静态库代码,有关全局执行一次的代码都注释掉,除了全局/静态变量的初始化。
回复
xingpacer 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());
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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