【求助】在win7 64bit上用VC6编译了一个小程序,拿到win XP 32bit上运行不了,提示error signature

时间:2022-07-29 06:37:19
在win7 64bit上用VC6编译了一个小程序,拿到win XP 32bit上运行不了,提示error signature 【求助】在win7 64bit上用VC6编译了一个小程序,拿到win XP 32bit上运行不了,提示error signature
以前没遇到过这种情况呢,用API编程,没有使用MFC,run-time选了MT。

11 个解决方案

#1


那你的程序是用32位编译还是用64位编译?
32位编译的程序可以在64位系统下兼容运行
64位编译的就不可以在32位系统下运行的, 寻址不一样

#2


引用 1 楼 Sandrer 的回复:
那你的程序是用32位编译还是用64位编译?
32位编译的程序可以在64位系统下兼容运行
64位编译的就不可以在32位系统下运行的, 寻址不一样


VC6上编译应该是32程序
lz的问题应该是32位系统中没有对应的库吧,xp和晕妻的User32库不一样?或者你代码中含有版本判断的断言?

#3


以前遇到过这样问题。
用Depends(6.0的工具)查看你的exe需要哪些DLL以及在你开发机器上对应的版本号,如果DLL在你目标机器上有,那么确认版本号一致,否则把你开发机器上的DLL拷贝到目标机器exe的目录下。
估计你的问题是因为你程序需要的Windows本身的DLL版本号对应不上,程序运行时调用DLL中的某一个函数时没有造成的。
另外,你应该安装VC的运行时库吧,否则,你需要明确的知道你所需要的DLL到底是哪些,全不全。

#4


函数 Protocol 又叫函数签字 即 signature. 所以 error signature 就是 函数 Protocol 不对

#5



引用 2 楼 worldy 的回复:
VC6上编译应该是32程序
lz的问题应该是32位系统中没有对应的库吧,xp和晕妻的User32库不一样?或者你代码中含有版本判断的断言?

我也怀疑是User32库版本的问题,明天就去试试,把我的库直接放在同级目录下试试,好用就散分 【求助】在win7 64bit上用VC6编译了一个小程序,拿到win XP 32bit上运行不了,提示error signature

#6


引用 4 楼 schlafenhamster 的回复:
函数 Protocol 又叫函数签字 即 signature. 所以 error signature 就是 函数 Protocol 不对

理论上,我的程序应该只依赖KERNEL32.DLL和USER32.DLL,这两个是windows API的库,没办法静态链接到程序中。
那我要同时支持两个系统怎么办?而且我用的函数都是很古老的,XP和win7下面应该都有,为啥会报告这个问题?
另外我如何确定是什么函数的签名有冲突?多谢解答。

#7


编译器定义
WIN32,_WINDOWS

#8


引用 1 楼 Sandrer 的回复:
那你的程序是用32位编译还是用64位编译?
32位编译的程序可以在64位系统下兼容运行
64位编译的就不可以在32位系统下运行的, 寻址不一样

#9


在win XP 32bit上装个vc6,调试下呗,反正vc6那么小

#10


引用 6 楼 u011855641 的回复:
Quote: 引用 4 楼 schlafenhamster 的回复:

函数 Protocol 又叫函数签字 即 signature. 所以 error signature 就是 函数 Protocol 不对

理论上,我的程序应该只依赖KERNEL32.DLL和USER32.DLL,这两个是windows API的库,没办法静态链接到程序中。
那我要同时支持两个系统怎么办?而且我用的函数都是很古老的,XP和win7下面应该都有,为啥会报告这个问题?
另外我如何确定是什么函数的签名有冲突?多谢解答。


实在点的就在 winxp 上编译, 就可以在两个系统下运行
因为 win7 会做向下兼容

#11


最后这个问题用更换到VS2008解决了,看来VC6确实老了啊。
散分。

#1


那你的程序是用32位编译还是用64位编译?
32位编译的程序可以在64位系统下兼容运行
64位编译的就不可以在32位系统下运行的, 寻址不一样

#2


引用 1 楼 Sandrer 的回复:
那你的程序是用32位编译还是用64位编译?
32位编译的程序可以在64位系统下兼容运行
64位编译的就不可以在32位系统下运行的, 寻址不一样


VC6上编译应该是32程序
lz的问题应该是32位系统中没有对应的库吧,xp和晕妻的User32库不一样?或者你代码中含有版本判断的断言?

#3


以前遇到过这样问题。
用Depends(6.0的工具)查看你的exe需要哪些DLL以及在你开发机器上对应的版本号,如果DLL在你目标机器上有,那么确认版本号一致,否则把你开发机器上的DLL拷贝到目标机器exe的目录下。
估计你的问题是因为你程序需要的Windows本身的DLL版本号对应不上,程序运行时调用DLL中的某一个函数时没有造成的。
另外,你应该安装VC的运行时库吧,否则,你需要明确的知道你所需要的DLL到底是哪些,全不全。

#4


函数 Protocol 又叫函数签字 即 signature. 所以 error signature 就是 函数 Protocol 不对

#5



引用 2 楼 worldy 的回复:
VC6上编译应该是32程序
lz的问题应该是32位系统中没有对应的库吧,xp和晕妻的User32库不一样?或者你代码中含有版本判断的断言?

我也怀疑是User32库版本的问题,明天就去试试,把我的库直接放在同级目录下试试,好用就散分 【求助】在win7 64bit上用VC6编译了一个小程序,拿到win XP 32bit上运行不了,提示error signature

#6


引用 4 楼 schlafenhamster 的回复:
函数 Protocol 又叫函数签字 即 signature. 所以 error signature 就是 函数 Protocol 不对

理论上,我的程序应该只依赖KERNEL32.DLL和USER32.DLL,这两个是windows API的库,没办法静态链接到程序中。
那我要同时支持两个系统怎么办?而且我用的函数都是很古老的,XP和win7下面应该都有,为啥会报告这个问题?
另外我如何确定是什么函数的签名有冲突?多谢解答。

#7


编译器定义
WIN32,_WINDOWS

#8


引用 1 楼 Sandrer 的回复:
那你的程序是用32位编译还是用64位编译?
32位编译的程序可以在64位系统下兼容运行
64位编译的就不可以在32位系统下运行的, 寻址不一样

#9


在win XP 32bit上装个vc6,调试下呗,反正vc6那么小

#10


引用 6 楼 u011855641 的回复:
Quote: 引用 4 楼 schlafenhamster 的回复:

函数 Protocol 又叫函数签字 即 signature. 所以 error signature 就是 函数 Protocol 不对

理论上,我的程序应该只依赖KERNEL32.DLL和USER32.DLL,这两个是windows API的库,没办法静态链接到程序中。
那我要同时支持两个系统怎么办?而且我用的函数都是很古老的,XP和win7下面应该都有,为啥会报告这个问题?
另外我如何确定是什么函数的签名有冲突?多谢解答。


实在点的就在 winxp 上编译, 就可以在两个系统下运行
因为 win7 会做向下兼容

#11


最后这个问题用更换到VS2008解决了,看来VC6确实老了啊。
散分。