我可以在Visual C++ 6.0的非Unicode调试模式下使用Windows 7 64位上的所有Service Pack编译我的32位ATL项目(COM库)。它在两种情况下都能正常工作:如果正常运行或以管理员身份运行。发布版本中的Visual C++ 6编译错误
但是非Unicode版本构建失败。
对于初学者来说,VC++编译器无法找到包含文件(如schannel.h,因为它属于Platform SDK,因此它在另一个文件夹中)。只有编译器在Release版本中扫描了VC++本身的核心Include文件夹(尽管Platform SDK的文件夹在Options中指定,无论如何在调试模式下都没有问题)。我试图将SDK中的包含文件复制到Program Files(x86)以外的某个位置,因为认为VC++ 6.0可能不够好,并且UAC问题(并且无法以某种方式访问包含在原始受限位置),但它没有帮帮我。最后,我将编译器无法找到的所有文件复制到VC++本身的Include文件夹中,这让我进一步深入。编译器以一种新的方式抱怨(仅举几个例子): C:\ Program Files(x86)\ Microsoft Visual Studio \ VC98 \ INCLUDE \ wintrust.h(139):error C2143:syntax error:失踪 ';' '*' C:\ Program Files(x86)\ Microsoft Visual Studio \ VC98 \ INCLUDE \ wintrust.h(139):错误C2501:'CMSG_SIGNER_INFO':缺少存储类或类型说明符 C:\ Program Files x86)\ Microsoft Visual Studio \ VC98 \ INCLUDE \ wintrust.h(139):错误C2501:'psSignerInfo':缺少存储类或类型说明符
但错误日志不再包含任何“文件未找到”或类似的东西。尽管这些错误看起来很像“找不到文件”的症状,但这只是一种猜测。无论如何,我将Platform SDK的完整包含文件夹复制到VC++ Include文件夹中,但它没有帮助。
再一次,调试版本就好了。然后,我开始比较我使用的Debug和Release MinDependency非unicode构建的编译和链接选项,并最终使它们完全相同。
我发现驱动VC++疯狂的唯一事情是它放在生成文件中的调试信息量。
总之。如果我使用/ Zl开关编辑(程序数据库进行编辑并继续),它可以工作。其他一切都失败了(包括程序数据库)。
此前,当我有Win XP的时候,我没有这样的问题。在Win7 64位上,是否仍然可以使用旧的VC++ 6.0?我迫切需要那些旧的VC++作为新的兼容性问题(我也有VS 2008,一切都很好,但即使它在MinDependency中链接,生成的.DLL也不适用于某些非常旧的系统)。
我的猜测是,当使用/ Zl开关时,VC++甚至可能会使用不同的编译器。但这只是一个疯狂的猜测,无论如何我不知道如何检查这个以及接下来要做什么。任何线索?
如果您无论出于何种原因都必须使用15年前的编译器,那么您也应该维护一个WinXP,或者甚至是Win2K或更早版本的机器以进行开发。至少,使用Windows的32位版本。 – Praetorian
那么,我已经在研究这些选项。至少我可以用我的PC开发和调试(因为它可以和调试版本一起工作),并可以在其他地方编译发布版本(这不会每天都会发生)。不完美,但仍然比没有好。 – Alex
啊!试图在WinXP 32位,并得到同样的问题。看起来像VS 6.0 SP6和平台SDK 2003年2月(2002年8月也有问题)有问题。早些时候,我使用了他们的另一个版本,比较旧的VS 6.0和旧的SDK,虽然谷歌说VS 6.0 SP6和平台SDK 2003年2月应该一起工作就好了... – Alex