none
VC6.0编译的程序怎么会调用msvcr80.dll? RRS feed

  • 问题

  • 在XP上安装sqlserver2008,需要先装.netframwork3.5。装完后,在装用sqlserver2008的过程中,sqlserver2008报错了(未知错误"-1073741757"),我的一个正在运行的 用VC6.0编译的 程序也报错了,还有oracle的nmupm.exe也报错了,后两者都是msvcr80.dll模块错误。

    VC6.0编译的程序怎么会调用msvcr80.dll?还请高手指导一二。

    2010年4月2日 6:50

答案

  • 安装目录里有vc6的msvcrt.dll,但是查看调用显示的是system32目录下的7.1版的msvcrt.dll,而不是安装目录里的vc6的msvcrt.dll。

    后来发现:该程序使用了旧版本的pdh.dll,会调用.net framework的性能方面的dll,如netfxperf.dll、perfcounter.dll,安装sqlserver2008后还会调用perf-MSSQL$SQLServer2008-sqlctr10.0.1600.22.dll。

    换成system32目录底下的新版本的pdh.dll后,这些程序既不调用.net framework的性能方面的dll,也不调用perf-MSSQL$SQLServer2008-sqlctr10.0.1600.22.dll了。安装sqlserver2008也可以成功了。


    有谁知道其中的道理吗?这样做会不会隐藏其他问题呢?

    • 已标记为答案 samesky76 2010年4月11日 11:07
    2010年4月8日 1:17

全部回复

  • 这可能是你在安装时把原来VC6的VC运行库的lib给覆盖掉了,导致链接时链接到了msvcr80上

    用depend walker看看是不是引入了这个dll还是由其他问题导致的

    2010年4月2日 15:23
    版主
  • 用360进程管理工具看了一下,在安装.net framework 2.0及以下版本或者没安装.net framework 的机器上运行时,加载的dll里没有msvcr80.dll;在安装.net framework 3.0及以上版本的机器上运行时,加载的dll里没有msvcr80.dll。是不是windows自己的一些核心dll变了,多加载了一些dll?
    2010年4月3日 2:26
  • 可以从别人的机器上复制一份VC6的msvcr.dll到你的VC的安装目录中


    欢迎光临我的个人网站:http://www.joyvc.cn,本网站提供[IM即时通信|棋牌游戏|网游开发|UI编程|网络通讯|组件开发|图像多媒体|数据库]方面的VC/C++/C技术文章、源代码和教程资料
    • 已建议为答案 Nancy Shao 2010年4月7日 7:18
    • 取消建议作为答案 samesky76 2010年4月11日 11:07
    2010年4月7日 3:23
    版主
  • 安装目录里有vc6的msvcrt.dll,但是查看调用显示的是system32目录下的7.1版的msvcrt.dll,而不是安装目录里的vc6的msvcrt.dll。

    后来发现:该程序使用了旧版本的pdh.dll,会调用.net framework的性能方面的dll,如netfxperf.dll、perfcounter.dll,安装sqlserver2008后还会调用perf-MSSQL$SQLServer2008-sqlctr10.0.1600.22.dll。

    换成system32目录底下的新版本的pdh.dll后,这些程序既不调用.net framework的性能方面的dll,也不调用perf-MSSQL$SQLServer2008-sqlctr10.0.1600.22.dll了。安装sqlserver2008也可以成功了。


    有谁知道其中的道理吗?这样做会不会隐藏其他问题呢?

    • 已标记为答案 samesky76 2010年4月11日 11:07
    2010年4月8日 1:17