旧项目是在Windows7x86/VS2008环境下使用makefile进行编译的纯C项目。
这次要求升级为Windows10环境编译
编译环境有几个关键点,分开组合,进行了调查
1.Windows10 VS2019(Framework4.7.2 这个升级了)
在这个环境下,是找不到Win32.Mak文件的
我想的办法是将旧系统中的文件拷贝到工程目录,然后进行引用
Win7下的Win32.Mak文件路径:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\Win32.Mak
将mak文件的头进行修改
!include <./Win32.Mak>
直接使用当前路径下的Win32.Mak文件
结果:编译打包为DLL,相同数据,运算结果与旧项目不一致,怀疑是因为Framework升级后导致,可以能是因为系统有差异,导致运算位数改变
2.因为怀疑是Framework的问题,所以这次使用Windows10+VS2008+Framework3.5
Windows10更新Framework3.5有很多方法,可以自行baidu,我是直接用手机给笔记本开热点,然后进行WindowsUpdate,也挺快的,手机网络比公司的网络给力多了。
此时你会发现,安装Framework3.5之后,Windows10中也会安装SDKv6.0A
然后其实旧项目可以直接进行编译。
结果:运算结果与旧项目一致。
结论,有一些代码中使用了WindowsAPI,这些WindowsAPI是基于WindowsSDK的,如果直接升级编译环境(WindowsSDK),而不修改对应的WindowsAPI函数,那么有可能会出现内存运算不一致,或者出现内存异常。
最后因为客户并没有给我们升级的钱。。就没有给他升级SDK,仍然使用了Framework3.5。。