程序在Win7系统下无法正常工作

yangyangqinqin 2018-09-18 04:29:05
我有一个程序用到了第三方的图像处理库,现在的情况是这样的,如果我用VC6.0写程序调用这个库,那么程序在XP系统以及Win7系统(包括32位和64位)都能正常工作。如果我用VS2010(MFC)写程序调用这个库,那么在XP系统上能正常工作,在Win7系统上就不能正常工作了(注意不是不能运行,程序是能运行的,只是第三方库没有正常工作,即没有正常执行其应有的功能),请问一下各位,这个是什么原因。在Win7系统上,我用工具观察用VC6.0和VS2010写的两个程序(内部代码完全一样),发现其第三方库所调用的各种库,都是一样的,但就是执行结果不一样。。。
...全文
388 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
rlzlnet 2018-10-09
  • 打赏
  • 举报
回复
目标平台版本降到最低。 尝试以\MT模式编译,以\MD模式依赖vs运行库,运行库版本和系统内核库版本有差异,修复不少bug
gordonlj 2018-10-08
  • 打赏
  • 举报
回复
哎,遇见和LZ一样的问题,没有办法,只能返工,重新搞到VC6上;擦屁股的活,不好干啊!
  • 打赏
  • 举报
回复
引用 10 楼 yangyangqinqin 的回复:
[quote=引用 9 楼 DelphiGuy 的回复:]
在命令行下,对2010生成的可执行文件:
editbin xxx.exe /dynamicbase:no /largeaddressaware:no
然后测试运行是否正常,不要在IDE中运行


你好,执行editbin xxx.exe /dynamicbase:no /largeaddressaware:no时提示 dynamicbase:no是无法识别的Option,被忽略,然后运行(非IDE中)结果还是不行[/quote]

应该是vs2010里的editbin不支持这个命令开关,可以用高版本带的工具试一下。也可能是DEP的问题,把程序加入DEP排除列表试试,或者用editbin xxx.exe /nxcompact:no修改可执行文件。
因为据你说vc6编译的程序在win7中能正常运行,最大的可能性就是这几个问题,尤其是动态基地址。
yangyangqinqin 2018-09-30
  • 打赏
  • 举报
回复
引用 9 楼 DelphiGuy 的回复:
在命令行下,对2010生成的可执行文件:
editbin xxx.exe /dynamicbase:no /largeaddressaware:no
然后测试运行是否正常,不要在IDE中运行


你好,执行editbin xxx.exe /dynamicbase:no /largeaddressaware:no时提示 dynamicbase:no是无法识别的Option,被忽略,然后运行(非IDE中)结果还是不行
qq_43317024 2018-09-30
  • 打赏
  • 举报
回复
这样呢 VC6再做个DLL(exe)调用第三方库 VS2010调用VC的DLL
yshuise 2018-09-30
  • 打赏
  • 举报
回复
NO NO NO NO

不同的平台,运行的程序是不一样的,只是名字一样。
赵4老师 2018-09-27
  • 打赏
  • 举报
回复
在虚拟机中使用。



不要做A语言代码修改为B语言代码的无用功。
也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
即可很方便地让A、B两种语言之间协调工作。
比如:
A将请求数据写到文件a.txt,写完后改名为aa.txt
B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
A发现bb.txt存在时,读取其内容,读完后删除bb.txt
以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。
除非A或B不支持判断文件是否存在、文件读写和文件更名。
但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢?
可以将临时文件放在RamDisk上提高效率减少磨损磁盘。
数据的结构很复杂的话,文本文件的格式问题可参考json或xml

共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的:
·进程之间松耦合
·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。
·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。
·方便在线开关服务,只需删除或创建该临时文本文件即可。
·方便实现分布式和负载均衡。
·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满)
·……

“跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边,
回头是“使用共享纯文本文件进行信息交流”的岸!
  • 打赏
  • 举报
回复
在命令行下,对2010生成的可执行文件:
editbin xxx.exe /dynamicbase:no /largeaddressaware:no
然后测试运行是否正常,不要在IDE中运行
yangyangqinqin 2018-09-26
  • 打赏
  • 举报
回复
现在我的程序已经没有办法从VS2010转到VC6.0了(工作量太大,最开始用VS2010写程序的时候还没发现这个问题。。。),现在就在想有没有什么补救的方法
yangyangqinqin 2018-09-26
  • 打赏
  • 举报
回复
感谢各位!在此统一回复:在VS2010(MFC)中 Platform toolset值为V100;字符集设置为各种选项都试过了,都不行;这个第三方库比较老,已经没有办法问开发者了。。。
sevancheng 2018-09-19
  • 打赏
  • 举报
回复
unicoe 多字节设置保持一致
赵4老师 2018-09-19
  • 打赏
  • 举报
回复
VS      VS version  .NET Framework     Default in Windows
------ ---------- ----------------- -----------------------------------
- - 1.0(1.0.3705.0) -
VS2003 7.x 1.1(1.0.3705.0) Windows Server 2003
VS2005 8.x 2.0(2.0.50727.42) -
- - 3.0(3.0.4506.30) Windows Vista | Windows Server 2008
VS2008 9.x 3.5(3.5.21022.8) Windows 7 | Windows Server 2008 R2
VS2010 10.x 4.0(4.0.30319.1) -
VS2012 11.x 4.5 -
VS2013 12.x 4.5.1 -
VS2015 14.x 4.6 -
VS2017 15.x 4.7 Windows 10
CGabriel 2018-09-18
  • 打赏
  • 举报
回复
检查一下 Platform toolset. 的值
Project property page -> Configuration Properties -> General -> platform toolset.
kbasm 2018-09-18
  • 打赏
  • 举报
回复
第三方库兼容性问题,查查它文档,问问它开发者

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧