Qt应用程序“xxx.exe 已停止工作 故障模块msvcr120.dll”

Qt应用程序“xxx.exe 已停止工作 故障模块msvcr120.dll”

一、问题描述

相信许多程序员都遇到过这种问题,好不容易写好程序,准备打包啦。在自己电脑上运行时,一切都很正常,放到其他电脑上死活运行不起来、要么出现很多问题,最糟糕的是直接崩溃!最近就遇到了一个让我崩溃的问题,在其他电脑上运行时一直出现“xxx.exe 已停止工作 故障模块msvcr120.dll”,使用各种修复工具修复dll,使用depenency walk找各种依赖库都没有解决该问题。错误截图如下:

这里写图片描述

二、解决办法:

1、在尝试了各种办法之后没有效果,就把工程直接一直到另外一台电脑上编译好可执行程序再运行,打包后竟然可以运行啦。但是在把这个程序移植回来,还是会出现上述错误,于是我就对比到底哪里出了错。最后发现是路径的问题。因为程序中有些地方使用的是相对路径,打包后程序路径发生变化啦,所以才导致的上述错误。问题是发现啦,下面就是解决啦。

2、首先想到的是通过找到可执行程序的路径再去找文件的相对路径的方法,于是我想到了Qt中的函数QApplication::applicationDirPath()获取可执行程序的路径+文件名称,再转化成const char类型(因为我需要传这种类型),结果还是出现上面的错误。于是各种qDebug(),路径都没有问题,打包之后就是不行。最后抱着试试的态度,调用微软的API接口GetModuleFileName()函数,获取路径再转化成const char竟然解决问题了。

三、遗留的问题:

为什么使用QApplication::applicationDirPath()获取可执行文件路径再转化成const char*方法不行而GetModuleFileName()函数可以?有知道的请指教,谢谢!

posted @ 2017-12-22 23:01  ISmileLi  阅读(135)  评论(0编辑  收藏  举报