MFC生成的exe文件在别人电脑无法正常运行:无法启动此程序、已停止工作、无法定位程序输入点

本文详述了MFC生成的exe文件在不同电脑上遇到的运行问题及解决步骤,涉及dll缺失、位数不匹配等常见错误,并提供了解决方案。

本文转载连接: https://blog.youkuaiyun.com/yanhuatangtang/article/details/78261318

 

MFC生成的exe文件在别人电脑无法正常运行,出现问题一个接一个

已在MFC中设置为:release版本设置:静态库中使用MFC+MT

这个问题查看问题详细信息的话,是软件编写问题,内存泄露;

问题事件名称:    APPCRASH
  应用程序名:    DEP.exe
  应用程序版本:    1.0.0.1
  应用程序时间戳:    59dd6db3
  故障模块名称:    StackHash_e8ad
  故障模块版本:    0.0.0.0
  故障模块时间戳:    00000000
  异常代码:    c0000005
  异常偏移:    0000f61c
  OS 版本:    6.1.7601.2.1.0.256.48
  区域设置 ID:    2052
  其他信息 1:    e8ad
  其他信息 2:    e8adce1c2b9e7be834b4063ac3c53863
  其他信息 3:    e8ad
  其他信息 4:    e8adce1c2b9e7be834b4063ac3c53863

联机阅读隐私声明:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804

如果无法获取联机隐私声明,请脱机阅读我们的隐私声明:
  C:\Windows\system32\zh-CN\erofflps.txt

简单总结下出现的问题和解决方法:

1、mfc140u.dll

copy了system32文件下的mfc140u.dll放到exe目录下;结果出现2问题:

2、应用程序无法正常启动0xc000007b:

这个问题是我的电脑是64bits,在MFC中编写的软件是x86的,32位的;

因为:win7 64位的dll在System32中,32位的dll在SysWOW64中。

所以需要的mfc140u.dll不应该是system目录,应该是SysWow64中;

解决后又出现新问题:

3、vcruntime140.dll

计算机中丢失vcruntime140.dll;

将SysWow64中的对应dll放入到其中;

解决后又出现新问题:

4、丢失api-ms-win-crt-runtime-l1-1-0.dll

将SysWow64中的对应dll放入到其中

解决后又出现新问题:

无法定位

 

这下不晓得怎么处理:

最终采用的方式:网友的方式http://www.cnblogs.com/zhongtang/p/7448823.html,感谢

不同操作系统32/64、不同程序的位数32/64,拷贝的文件不同:

 

规则如下:

a、64位操作系统,32位程序,选择syswow64下dll

b、64位操作系统,64位程序,选择system32下dll

c、32位操作系统,32位程序,选择system32下dll

 

拷贝所有api-ms开头的dll ,以及msvcp140.dll,vcruntime140.dll,ucrtbase.dll到程序目录

 

 

1、mfc100ud.dll

win7 64位System32里的dll为64位的,32位的dll在SysWOW64里

应用程序无法正常启动0xc000007b解决方法

 

2、特别补充一点:

当上述补充DLL一起打包后,放到其他电脑上基本没有问题,但在win8.1 64bits中又出现了缺少msvcr100.dll,在相应路径中找到此文件一起打包,解决。

...

本文转载连接: https://blog.youkuaiyun.com/yanhuatangtang/article/details/78261318

### MFC生成EXE文件运行报错解决方案 当MFC生成的 `.exe` 文件在目标机器上运行时提示“无法定位程序输入”的错误,通常是因为动态链接库(DLL)版本不匹配或者缺少必要的依赖项所致。以下是可能的原因以及对应的解决方法: #### 原因分析 1. **目标计算机上的Visual C++ Redistributable版本过旧或缺失** 如果应用程序使用的是较新的 Visual Studio 编译器编译而成,则目标计算机需要安装对应版本的 Microsoft Visual C++ 可再发行组件包 (Redistributable)[^1]。 2. **MFC DLL 版本冲突** 应用程序使用的 MFC 动态链接库版本与目标系统中的现有版本存在冲突。这可能是由于多个不同版本的 MFC 安装在同一台计算机上引起的[^2]。 3. **静态/动态链接设置不当** 若项目配置为动态链接到 MFC 和 CRT(C Run-Time Library),而目标环境中未提供所需的 DLL 或者其路径不可达,则会出现此问题[^3]。 4. **第三方库兼容性问题** 使用了一些特定于开发环境的第三方库,在部署至其他环境时未能正确加载这些库的功能入口地址也会引发该类错误消息显示出来[^4]。 #### 解决方案 针对上述原因可以采取如下措施来解决问题: - #### 更新Microsoft Visual C++可再发行组件包 确认目标操作系统已安装最新版适用于所采用之MSVC工具链版本号相匹配的那个系列下的全部更新补丁集;如果尚未完成此项操作的话,请访问微软官方网站下载相应平台架构(x86/x64/arm etc.)下最新的vc_redist.xxxx.exe并执行安装过程直至成功结束为止[^5]。 - #### 修改项目的链接方式 将工程属性内的"C/C++ -> Code Generation"节下的Runtime Library选项更改为多线程调试(/MTd)/发布模式(/MT),从而切换成以静态形式嵌入标准c/c++ runtime library而非通过外部dll引用它们的方式构建最终产物。这样做的好处是可以减少对外界条件变化敏感度的同时也增加了分发便捷程度但由于会增大二进制体积所以需权衡利弊后再做决定[^6]。 - #### 部署正确的依赖关系 利用Dependency Walker 工具扫描你的 .exe 文件查看是否存在任何丢失或损坏的 dlls 。对于发现的所有必需但不存在的模块都应该被复制到同一目录下或者是添加到系统的PATH变量里去以便能够顺利解析调用请求到达实际实现处[^7]。 - #### 清理重建整个解决方案 删除所有中间对象(.obj,.pch等)以及最后产生的输出成果物(.exe),然后重新按照既定流程再次完整地经历一遍完整的build cycle,有时候简单的缓存残留也可能导致奇怪的现象发生因此这样做有助于排除潜在干扰因素的影响[^8]. ```cpp // 示例代码片段展示如何更改VS项目设置为静态链接CRT #include <iostream> int main() { std::cout << "Hello Static Linking!" << std::endl; return 0; } ``` 以上即是对处理此类情况的一些常见建议和技术手段概述。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值