最近几天被这个问题困惑了许久。 不禁感叹微软的东东真是越做越烂了,也终于明白了时隔12年大家仍然死守VC6的原因。。
用VC2005编译的程序,编译时没有任何错误,但是运行时就是提示“应用程序正常初始化失败”!! 查找了各方面资料,做了各种尝试,网上说什么的都有:有让安装vc2005 sp1补丁的;有让安装vcredist_x86.exe的; 有让把CRT库的dll直接拷贝到程序目录的; 有让清理注册表的;有让装.NetFramework新版本的;有让查manifest的;
结果我尝试了半天,几乎都是浪费时间。上面最后一条说的还算正确,只是作者把事情描述得太繁琐了。。现在把处理的方法说一下,省得大家再走弯路:
1. VC2003、VC2005、VC2008及其后续版本,对底层最基本的CRT、MFC、ATL库都进行了重构,为了避免不同版本的库引起冲突,重构后的库文件一般放在 C:\\windows\WinSxS 文件夹中,并用特定的文件夹\文件名称进行标识;
2. 与VC6不同, VC2003、VC2005、VC2008及其后续版本,引入了manifest清单的概念,即应用程序编译后会同时生成对应的.manifest文件,并将该.manifest文件作为资源编译到dll或者exe中去。.manifest文件实际上是一个XML格式的文本文件,里面记录了dll或exe中要引用的CRT、MFC、ATL库的版本和名称。VC6编译的应用程序对CRT、MFC、ATL的dll都是直接调用,而VC2003、VC2005、VC2008编译的程序都是先查询编译到资源中的manifest中的记录,然后按照记录提供的版本和名称去搜寻对应的CRT、MFC、ATL库以及随库发布的.manifest文件,搜寻的路径包括当前目录、C:\\windows\WinSxS 等等,如果没有找到对应的库文件,则提示“应用程序正常初始化失败”;
3.因此解决这个问题的办法就是:(a)用文本编辑器打开exe或dll对应的.manifest文件,查看它引用的CRT、MFC、ATL库的版本;或者,用UltraEdit直接打开exe或者dll,从资源区中找到编译进去的.manifest信息,找到它引用的CRT、MFC、ATL库的版本;或者,运行程序,当程序弹出“应用程序正常初始化失败”对话框时,在桌面上右键点击“我的电脑”-“管理”-“事件查看器”-“系统”,双击查看其中的记录,可以看到出错的原因是因为缺少了某某版本的CRT、MFC、ATL库,记录下这个版本信息;(b)记录到的库的版本信息一般类似于“Microsoft.VC90.DebugCRT”,之后到C:\\windows\WinSxS 或者VC200X的安装文件夹中搜索包含这个字符串的文件夹和文件,将搜索到的dll和.manifest文件都拷贝到应用程序所在的文件夹中,其中,.manifest文件必须重命名为“Microsoft.VC90.DebugCRT.manifest”(这里以Microsoft.VC90.DebugCRT为例),这样应用程序就可以正常运行了;(c)注意:库的.manifest文件和dll要一同拷贝到应用程序根目录去,因为应用程序会将编译到内部的manifest信息与外部的.manifest文件进行对比,之后才会对库的dll进行调用。如果只拷贝库的dll文件是没有用的;
4.如果本机编译和运行程序都ok,但是将编译好的程序拿到其它机器上确无法运行,则多半也是这个原因。另外,如果提示"应用程序配置不正确",大多也是因为上面所说的CRT、MFC、ATL库版本与应用程序不匹配导致的,可以如法炮制进行解决;
好了,就这些。。快过年了,祝everyone新年愉快。。 分享本身也是一种快乐。。
文章来源:http://microblue.com.cn/it/8823.html
分享到:
相关推荐
0xc0150002ssasdw xc0150002是应用程序正常初始化失败。 解决的一个办法——在程序运行出错的时候,右键“我的电脑”,然后点击“管理”,再点击“事件查看器",最后看下“系统”,信息如下: (1)找不到附属汇编 ...
### VC++全局变量初始化详解 ...总之,理解VC++中全局变量的初始化过程及其顺序对于开发高质量的应用程序至关重要。正确使用静态和动态初始化,以及合理控制初始化顺序,可以帮助我们避免许多常见的编程陷阱。
屏幕会提示应用程序正常初始化0xc0150002等错误。我特地在网上搜了很多解决办法,把所需要的工具打包在了一起;你解压后分别安装里面的二个游戏运行所需的库文件vc2005_x86.exe和vcredist_x86.exe,然后再次玩就可以...
在Windows 10系统上使用Visual C++ 6.0 (简称VC6)时,可能会遇到一个常见的错误:“应用程序无法正常启动(0xc0000142)”。这通常是因为操作系统与软件之间的兼容性问题导致的。本篇文章将详细介绍如何解决这一问题,...
2. 应用程序初始化失败(0xc0150002):安装VS80sp1补丁,包括VS80sp1-KB926604-X86-CHS.exe和VS80sp1-KB971090-X86-INTL.exe。 3. 无法找到OgreMain_d.dll:这通常是由于配置问题导致的。你需要调整项目的输出目录...
这一配置过程已经过验证,确保不会遇到“应用程序正常初始化(0xc0150002)失败”的错误。 首先,确保你拥有以下软件: 1. Visual Studio 2008(带MSDN,大约3.7GB) 2. VS2008 SP1补丁(约900MB) 3. CEGUI-0.7.7...
- **说明**:版本格式为“702NOR”+ VersionH + VersionL,可以在初始化VC0702之后读取版本号,以确认初始化是否成功。 2. **UART_READ_REG** - **命令字**:0xC1 - **命令含义**:读取芯片寄存器数据 - **发送...
3. **安装vcredist_x86.exe**:为了解决"应用程序正常初始化(0xc01500002 失败)"的错误,需要下载并安装Microsoft Visual C++ 2008 Redistributable,即vcredist_x86.exe,这通常可以从微软官方网站获取。...
1. 初始化:设圆心为`(xc, yc)`,半径为`r`,起始点`(x0, y0)`为`(xc - r, yc)`,结束点`(x1, y1)`为`(xc + r, yc)`。 2. 初始化两个变量`dx`和`dy`,`dx = 2 * (1 - r)`,`dy = -2 * r`,初始错误项`e`为0。 3. ...
1. **初始化VFW**:使用`AVIFileInit`函数初始化VFW环境。 2. **打开视频设备**:通过`AVIStreamOpenFromFile`或`AVIStreamOpenFromCaptureDevice`函数打开摄像头或其他视频源。 3. **捕获视频帧**:使用`...
- **配置和初始化**:理解配置引脚的用途,以正确加载配置数据,使FPGA在上电后正常工作。 - **调试与测试**:利用专用的调试引脚进行在线调试,如JTAG(Joint Test Action Group)接口,便于问题定位和修复。 在...
2. 矩阵运算函数:实现矩阵的初始化、乘法、求逆等操作。 3. 空间后方交会算法:根据输入的控制点和图像坐标,计算外方位元素。 4. 精度评估:计算并输出重投影误差。 5. 输入输出处理:读取控制点数据和图像坐标,...
- `vcHr02StartSample`:启动测量,初始化寄存器后开始测量,或在调用`vcHr02StopSample`后重新启动测量。 - `vcHr02StopSample`:停止测量,使芯片进入休眠。调用`vcHr02StartSample`可退出休眠并重启测量。 - `...
根据提供的信息,我们可以了解到这是一段用于初始化和配置ILI9163C控制器与瀚彩1.77英寸显示屏的代码。以下是对这段代码中关键命令及其功能的详细解析: ### 1. 初始化序列 #### ExitSleep (退出睡眠模式) ```c ...
提供了多种初始化方式,int[]、float[]、double[]均可构造初始化,或则先构造出CVector再由CVector初始化。 3、定义了一个最大允许误差#define permit_eof (1.0e-13),判断相等使用宏 #define EQUAL(a,b) ( ((b) ...
提供了多种初始化方式,int[]、float[]、double[]均可构造初始化,或则先构造出CVector再由CVector初始化。 3、定义了一个最大允许误差#define permit_eof (1.0e-13),判断相等使用宏 #define EQUAL(a,b) ( ((b) ...
6. **网元初始化和参数设置**:在4号网元的配置中,首先需要登录网元并初始化所有数据,然后设置网元类型、名称和位置信息,以及添加和配置所需板卡,如交叉连接板(XC)。 这个实验通过实际操作,帮助学生理解程控...
// BGI 格式的初始化图形设备,默认 640 x 480 HWND initgraph(int* gdriver, int* gmode, char* path); void bar(int left, int top, int right, int bottom); // 画无边框填充矩形 void bar3d(int left, int top...
总结来说,本文详细介绍了如何利用CPLD实现DSP对S29AL008D Flash存储器的高效烧写,包括CPLD的译码功能、硬件接口设计、VHDL编程以及DSP相关寄存器的初始化。这一方法在实际应用中展示了其高效性和通用性,对于需要...