vs2010运行总是提示:(msvcr90d.dll) 处最可能的异常: 0xC0000005,怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2010运行总是提示:(msvcr90d.dll) 处最可能的异常: 0xC0000005,怎么回事相关的知识,希望对你有一定的参考价值。

最简单的程序都报错
#include <opencv2/opencv.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])

const char* imagename = "lena.jpg";
//从文件中读入图像
Mat img = imread(imagename);
//如果读入图像失败
if(img.empty())

fprintf(stderr, "Can not load image %s\n", imagename);
return -1;

//显示图像
imshow("image", img);
//此函数等待按键,按键盘任意键就返回
waitKey();
return 0;

运行后提示:

lena.exe 中的 0x004665af (msvcr90d.dll) 处最可能的异常: 0xC0000005: 读取位置 0x67706a2e 时发生访问冲突
lena.exe 中的 0x004665af (msvcr90d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x67706a2e 时发生访问冲突
程序“[1896] lena.exe: 本机”已退出,返回值为 0 (0x0)。
装了vs2010专业版不行,本以为是软件问题,现在装了vs2010旗舰版还是不行,照样说msvcr90d.dll异常

参考技术A

楼主你好,你可以重新下载一个msvcr90d.dll文件,复制到c:\\windows\\system32文件夹,然后“开始,运行,输入regsvr32 msvcr90d.dll”即可。

msvcr90d.dll文件下载地址:http://www.edowning.net/soft/88743.htm

本回答被提问者和网友采纳
参考技术B 可能是程序设置里把x64和x86的lib,dll文件搞反了。追问

我发现问题了 原因是我安装了VS2008和2010,环境变量配置顺序出了问题,应该把vs10路径放前面,高版本的放在前面。因为VS2008对应的是msvcr90d.dll,而2010对应的是msvcr100d.dll。在运行2010程序时,应该执行msvcr100d.dll。我环境变量顺序配置出了问题。

在 VS2008 调试器中调用 SetWindowsHookEx 总是返回 NULL

【中文标题】在 VS2008 调试器中调用 SetWindowsHookEx 总是返回 NULL【英文标题】:Calling SetWindowsHookEx inside VS2008 debugger always returns NULL 【发布时间】:2010-02-19 10:40:05 【问题描述】:

我们正在开发一个执行低级键盘挂钩的 .Net 应用程序。当我们调用在调试器中运行的 SetWindowsHookEx 时,调用总是失败。

从已编译的可执行文件运行时,一切正常。如果我们附加到已调用 SetWindowsHookEx 的进程,则一切正常。

我在某处(我不记得)读到 VS 已经做了一个低级键盘钩子,但这应该不是问题,因为有 CallNextHook 函数。

有人知道发生了什么吗?

编辑:代码非常简单,异常是在调试器内部引发的,而不是在外部引发的。

Public Sub New()
    m_callback = New NativeMethods.KeyboardHookDelegate(AddressOf KeyboardCallback)
End Sub

Public Sub Start()
    m_handle = NativeMethods.SetWindowsHookEx(NativeMethods.HookType.WH_KEYBOARD_LL, m_callback, Marshal.GetHINSTANCE(Reflection.Assembly.GetExecutingAssembly().GetModules()(0)).ToInt32, 0)
    If m_handle = 0 Then
        Throw New Exception()
    End If
End Sub

【问题讨论】:

我在使用调试器时从未见过它失败。其他事情正在发生。如果您需要帮助,请发布代码。 【参考方案1】:

猜测可能是 VS 正在运行 .vshost.exe 进程,该进程在反射中可能看起来不同,但我不能肯定地说。我们使用 'Process.GetCurrentProcess().MainModule` 来获取要传入的模块。也许可以尝试一下。

【讨论】:

无论如何我都会使用你的 Process.GetCurrentProcess().MainModule 因为看起来更干净。 更改代码时,我发现使用 Int 而不是 InPtr 时出现了 PInvoke 错误。我也开始使用 GetModuleHandle。这两件事并排使应用程序也可以在 VS 中运行。

以上是关于vs2010运行总是提示:(msvcr90d.dll) 处最可能的异常: 0xC0000005,怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

无法启动此程序,因为计算机中丢失msvcr90.dll。尝试重新安装该程序以解决此问题

vs2010发布时去除msvcp100 dll和msvcr100 dll图解说明

vs2012打完update5后,启动就提示系统缺少MSVCR110.dll

解决运行wamp提示“MSVCR110.dll”丢失的问题!

vs2010 中文版怎么编译的时候按F5总是提示 “此项目已过期”

电脑中提示msvcr71.dll丢失,怎么办