救急:VC2010编译的程序如何能在Win2000上运行

water005 2012-10-07 08:56:07
程序已经做好,win7,xp下测试没问题,win2000测试提示:不合法的的win32应用程序。
Google一下,才知道vs2010不支持 xp sp2以下的系统,包括win2000。
网上说有一个方法,使用汇编函数绕过kernel32.dll,具体如下
http://ping235.blog.163.com/blog/static/44476138201191193644769/
但我调试了无数次,都不成功,win2000依然提示:不合法的的win32应用程序。

有哪位朋友遇到过类似问题,有无解决办法?因为客户中确实还有使用win2k的。
...全文
447 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmcanyu 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
1、将得到的crack.obj添加到需要支持Windows 2000的项目里,直接添加即可,(具体如何添加?)
[/Quote]

把crack.obj直接添加到项目里面就行了.

obj的链接顺序是不是先于lib?
water005 2012-10-09
  • 打赏
  • 举报
回复
1、将得到的crack.obj添加到需要支持Windows 2000的项目里,直接添加即可,(具体如何添加?)
2、如果不习惯使用obj文件,也可以用以下命令将obj编成lib文件:lib crack.obj,将得到的crack.lib文件添加到项目中即可,但必须确保链接顺序先于kernel32.lib。( 如何添加链接,才能确保链接顺序先于kernel32.lib?)

哪位高人指教一下,拜托了。。。
傻X 2012-10-09
  • 打赏
  • 举报
回复
1.debug和release文件夹下,注意,是文件多的那几个

2.一般自己添加的lib保证优先级比较容易,因为有路径的优先级可以设置。就是VC++ Directory里面设置新增路径即可

但是系统的lib貌似都要优于自己添加的lib。(这个要自己研究下了。)


3.另外,很多函数MSDN中都限制最低操作系统要求,这个也要注意。
water005 2012-10-09
  • 打赏
  • 举报
回复
谢谢jiangsheng,DelphiGuy,现在已经不提示 “不是合法的Win32程序”

但出现了“无法找到输入点 DecodePointer”,depend看了一下,发现依赖还在。难道我操作不对吗?
请教以下两步具体如何操作:

1、将得到的crack.obj添加到需要支持Windows 2000的项目里,直接添加即可,(具体如何添加?)
2、如果不习惯使用obj文件,也可以用以下命令将obj编成lib文件:lib crack.obj,将得到的crack.lib文件添加到项目中即可,但必须确保链接顺序先于kernel32.lib。( 如何添加链接,才能确保链接顺序先于kernel32.lib?)



[Quote=引用 7 楼 的回复:]

楼主提到的那个修改方法,我测试了是可以的,但是实在找不到win2000,只在xpsp1上测试了。
如果还不行的话,你可以:
editbin /VERSION:5.0 test.exe
editbin.exe是VC++中的一个命令行工具,test.exe是你写的程序。
[/Quote]
water005 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

那别用VS2010来编译了,改用05,08吧

[/Quote]

也试过08编译,不过修改的地方很多,CImage也不支持。
现在总算在XP SP1下通过了,WIN2K还是有依赖的函数 HeapQueryInfomation,看来只能放弃win2k用户了。
Eleven 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

引用 8 楼 的回复:
楼主提到的那个修改方法,我测试了是可以的,但是实在找不到win2000,只在xpsp1上测试了。
如果还不行的话,你可以:
editbin /VERSION:5.0 test.exe
editbin.exe是VC++中的一个命令行工具,test.exe是你写的程序。


您具体是如何实现的呢,能否告知一下,万分感谢,我现在会提示“无法找到程序输入点 Dec……
[/Quote]
那别用VS2010来编译了,改用05,08吧
water005 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
楼主提到的那个修改方法,我测试了是可以的,但是实在找不到win2000,只在xpsp1上测试了。
如果还不行的话,你可以:
editbin /VERSION:5.0 test.exe
editbin.exe是VC++中的一个命令行工具,test.exe是你写的程序。
[/Quote]

您具体是如何实现的呢,能否告知一下,万分感谢,我现在会提示“无法找到程序输入点 DecodePointer”,检查了
water005 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 10 楼 的回复:

由于我没装VC++的IDE,里面怎么设置我不敢保证。命令行下如此:

cl /Ox test.cpp crack.obj
[/Quote]

我这样操作好像不行哦,会提示链接错误。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

1、将得到的crack.obj添加到需要支持Windows 2000的项目里,直接添加即可,(具体如何添加?)
2、如果不习惯使用obj文件,也可以用以下命令将obj编成lib文件:lib crack.obj,将得到的crack.lib文件添加到项目中即可,但必须确保链接顺序先于kernel32.lib。( 如何添加链接,才能确保链接顺序先于kernel32.lib?)

哪位高人指教一下……
[/Quote]

由于我没装VC++的IDE,里面怎么设置我不敢保证。命令行下如此:

cl /Ox test.cpp crack.obj

water005 2012-10-09
  • 打赏
  • 举报
回复
谢谢,目前我是参考了这个方法,但还是提示“无法定位输入点 DecodePointer”,depend看是依赖还在。
似乎这个汇编函数没起作用,还是我没加进去?

尝试了4种方法都没起作用:我操作的方法是:
1、ml 生成obj后,项目->添加现有项->选择obj。(没起作用,于是用下面方法)

2、项目->属性->链接器->输入->附加依赖项:crack.obj,常规->附加库目录:D:\soft\myObj\debug,(也没作用,于是 编译为lib)

3、项目->属性->链接器->输入->附加依赖项:crack.lib,常规->附加库目录:D:\soft\myObj\debug,(也没作用)

4、#pragma comment(lib,"D:\\soft\\myObj\\debug\\crack.lib") 还是没作用


以上4种方法都不起作用,都提示“无法定位输入点 DecodePointer”



[Quote=引用 13 楼 的回复:]

http://hi.baidu.com/cppcoffee/item/6757e164eddf122d68105b09
[/Quote]
Eleven 2012-10-09
  • 打赏
  • 举报
回复
vs2010库用到了DecodePointer

DecodePointer Requirements

Client Requires Windows XP SP2.
Server Requires Windows Server 2003 SP1.
Header Declared in Winbase.h; include Windows.h.

Library Link to Kernel32.lib.
大熊猫侯佩 2012-10-08
  • 打赏
  • 举报
回复
不用MFC或dotNET,用纯C也不行?没搞过。
hdg3707 2012-10-08
  • 打赏
  • 举报
回复
这没有办法,用VS2003吧,这样改动不大,只需要生成工程,剩下的复制代码及资源就行了
  • 打赏
  • 举报
回复
楼主提到的那个修改方法,我测试了是可以的,但是实在找不到win2000,只在xpsp1上测试了。
如果还不行的话,你可以:
editbin /VERSION:5.0 test.exe
editbin.exe是VC++中的一个命令行工具,test.exe是你写的程序。

蒋晟 2012-10-08
  • 打赏
  • 举报
回复
那篇文章不是有说如果运行时出现不是合法的Win32程序,注意以下两处么
  • 打赏
  • 举报
回复
用2005、2008编译吧。
wyx100 2012-10-08
  • 打赏
  • 举报
回复
回复于:2012-10-08 09:52:06这没有办法,用VS2003吧,这样改动不大,只需要生成工程,剩下的复制代码及资源就行了
water005 2012-10-07
  • 打赏
  • 举报
回复
没人遇到过吗?急死人了。。。。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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