背景:
在VS2005编译C++文件,其中用到C写的动态链接库。编译链接都没有问题,但运行exe时运行到动态链接库中函数时,弹出0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0x00905a4d时发生访问冲突【注:错误地址因程序不同会有所不同】。这说明动态链接库编译的有问题,然后检查动态链接库编译选项,果然在链接器-》调试-》调试信息设置为 【否】 导致出现问题。
解决办法:
(1)项目-〉属性-〉配置属性-〉C/C++-〉常规-〉调试信息格式,这里不能为【禁用】
(2)项目-〉属性-〉配置属性-〉链接器-〉调试-〉生成调试信息,这里设为【是】
这种方法虽然能解决编译问题,但程序运行时还是会提示找不到动态连接库MSVCR80.DLL,你也可以手动下载这个动态链接库放到执行文件所在目录,解决问题。但VS编译器为什么会出现这样的错误呢,还需要找到根本原因。
根本原因:
由于VC需要把生成的文件中嵌入MANIFEST文件,而杀毒软件之类的会握有这个文件句柄(因为杀毒软件发现这个EXE,DLL正在读写),于是VC就写不进去了。解决方法是暂时关闭杀毒软件,这样就不用改写MANIFECT