关于mfc编程于mfc规则dll
mfc编程中每个进程只有一个类(该类承于cwin)的实例(这个实例是全局变量),问题来了,我自己写了个mfc规则的dll里面也有这样一个实例,那么我用自己写的mfc程序动...
mfc编程中每个进程只有一个类(该类承于cwin)的实例(这个实例是全局变量),问题来了,我自己写了个mfc规则的dll里面也有这样一个实例,那么我用自己写的mfc程序动态加载我写的dll时,这个进程不就有了两个这样的实例,这不矛盾吗?假如说我的dll里也添加了一个模态对话框,还有消息处理过程,那么在运行时是一直有两个实例的,这个程序能运行吗?当然我的mfc程序也显示了模态对话框,和消息处理过程,这样能同时显示两个模态对话框?希望高人回答一下,先谢谢!
谢谢你的回答,再问一下,如果我另开线程专门调用我的dll,那我的dll里的对话框能显示么?能操作不?按你的说法另开线程应该可以启动我dll里带信息处理过程的模态对话框,可是我今天试了,另一个线程跟本启动不起来,而且线程刚创建后,这个程序就没有响应了。这是为什么呢?还要麻烦你给解释一下,先谢谢! 展开
谢谢你的回答,再问一下,如果我另开线程专门调用我的dll,那我的dll里的对话框能显示么?能操作不?按你的说法另开线程应该可以启动我dll里带信息处理过程的模态对话框,可是我今天试了,另一个线程跟本启动不起来,而且线程刚创建后,这个程序就没有响应了。这是为什么呢?还要麻烦你给解释一下,先谢谢! 展开
1个回答
展开全部
动态加载的dll有自己的运行空间,和你的程序的运行空间是分开的。各自空间里面都有一个静态实例。
如果你理解不了,你就认为dll也是一个应用程序,两个应用程序的内存空间是分开的。
----------------------------------------------
通常,exe中的CWinApp是有自己的消息泵的,保证这个消息泵是正常工作的,画面也能正常工作。而dll中我们一般不开启消息泵的(另开线程除外),不开消息泵的dll不使用CWinApp类也可以,换个名字也可以的。
模态对话框的显示,依赖于消息泵,消息泵依赖于线程。同一个线程里面的调用,一定是同一个消息泵。所以不会同时显示两个模态对话框。即使同时显示出来了,一定是其中一个可以操作,另一个不能操作(对话框里面调用对话框)。因为是模态的,对话框不关闭,调用对话框的指令不会返回的(没有机会去调用另一个对话框)。
---------------------------------------------------
操作UI只能在主线程,这是微软的规定。
你是想同时显示两个模态对话框吗?如果你想同时显示两个模态对话框并同时激活他们,那他们就不是"模态"对话框了(你应该考虑做一个非模态对话框,让它看起来像个模态对话框而已)。
如果你理解不了,你就认为dll也是一个应用程序,两个应用程序的内存空间是分开的。
----------------------------------------------
通常,exe中的CWinApp是有自己的消息泵的,保证这个消息泵是正常工作的,画面也能正常工作。而dll中我们一般不开启消息泵的(另开线程除外),不开消息泵的dll不使用CWinApp类也可以,换个名字也可以的。
模态对话框的显示,依赖于消息泵,消息泵依赖于线程。同一个线程里面的调用,一定是同一个消息泵。所以不会同时显示两个模态对话框。即使同时显示出来了,一定是其中一个可以操作,另一个不能操作(对话框里面调用对话框)。因为是模态的,对话框不关闭,调用对话框的指令不会返回的(没有机会去调用另一个对话框)。
---------------------------------------------------
操作UI只能在主线程,这是微软的规定。
你是想同时显示两个模态对话框吗?如果你想同时显示两个模态对话框并同时激活他们,那他们就不是"模态"对话框了(你应该考虑做一个非模态对话框,让它看起来像个模态对话框而已)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询