注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

CWinThread+Vista 创建对话框失败。“当文件已存在时,无法创建该文件。 ”  

2010-08-11 20:04:45|  分类: vc界面编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Vista/Win7 中,在CWinThread中创建对话框失败。错误信息:“当文件已存在时,无法创建该文件。 ”,错误码:183

 

          在我看来,这个问题和http://forum.sysinternals.com/application-hang-on-vista_topic17404_post86827.html是一样的。以前曾简单分析过Vista、Win7的界面实现。相对于XP而言,在界面处理上,Vista更高级,它采用了多个线程来处理界面,而XP中只有一个线程!例如,对于一个对话框程序而言,XP系统中,将只创建一个线程,而Vista中可能是两三个(具体的记不清了)。所以,Vista中,界面一般不会死锁了。但是,由于UAC的限制,DirectUI等原因,事实上,Vista中的界面响应速度要慢一些。

        我认为,导致上面的问题的原因在于,这个多线程机制。也就是说,如果程序只有一个界面线程,显然,一切OK!因为,Vista系统会给这唯一的一个界面线程创建一两个辅助线程。  然而,如果是创建了多个界面线程,问题随之而来,Vista很可能没法为新增的界面线程创建辅助线程。

        这只是一种假设。我在CWinThread中,调用CDialog::Create来创建非模态对话框,然而,结果是失败!可以设想,界面辅助线程是在创建MFC对话框窗口时创建的,而这里没法创建辅助线程,也就是导致创建对话框失败。

        关于辅助线程的一些说法。有的说,是将WM_PAINT等消息放在了单独的线程中处理,也就是我说的辅助线程。也记不清在哪儿看的这些了。

       

 

        乱七八糟一大堆!

        最终解决:

        这个窗口使用了一个ActiveX控件,但是,ActiveX控件没有注册成功!所以导致创建窗口失败。我写了一个批处理来注册dll,为了省事,注册dll时加入了"/s"来静默注册,所以,注册失败了我也不知道。

        结果,为了查这个错误,我花费了大半天的时间!最终不得不在虚拟机里面安装Vista,在Vista里面再安装VC2008,折腾了大半天。

 解决方法:http://zhanyonhu.blog.163.com/blog/static/16186044201071193637434/

 

By:zhanyonhu

  评论这张
 
阅读(1770)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017