我可以使用Windows 7 64位上的所有服务包在Visual C ++ 6.0的非Unicode调试模式下编译我的32位ATL项目(COM库)。它在两种情况下都可以正常工作:如果正常运行或以管理员身份运行。
但非Unicode发布版本失败。
对于初学者来说,VC ++编译器无法找到包含文件(例如schannel.h,它位于另一个文件夹中,因为它属于Platform SDK)。在Release版本中,编译器只扫描了VC ++本身的核心Include文件夹(尽管在Options中指定了Platform SDK的文件夹,但无论如何在调试模式下都没有问题)。我试图将包含文件从SDK复制到Program Files(x86)之外的某个位置,因为我认为VC ++ 6.0可能不足以解决UAC问题(并且无法以某种方式访问包含在原始受限位置)但它没有救命。最后,我将编译器无法找到的所有文件复制到VC ++本身的Include文件夹中,让我继续前进。
现在编译器以一种新的方式抱怨(只是几个例子): C:\ Program Files(x86)\ Microsoft Visual Studio \ VC98 \ INCLUDE \ wintrust.h(139):错误C2143:语法错误:缺少';'在'*'之前 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的完整include文件夹复制到VC ++ Include文件夹,但它没有帮助。
再次,Debug构建就好了。然后,我开始比较我正在使用的Debug和Release MinDependency非unicode构建的编译和链接选项,最后使它们相同。
我发现推动VC ++疯狂的唯一因素是它在结果文件中放置的调试信息量。
简而言之。如果我用/ Zl开关编译(程序数据库编辑并继续),它可以工作。其他一切都失败了(包括程序数据库)。
早些时候,当我使用Win XP时,我没有遇到过这样的问题。是否仍然可以在Win7 64位上使用旧的VC ++ 6.0?我迫切需要旧的VC ++,因为新的VC ++有太多的兼容性问题(我也有VS 2008,一切都很好,但即使它在MinDependency中链接,生成的.DLL也不适用于一些非常旧的系统)。
我的猜测是,当使用/ Zl开关时,VC ++甚至可能使用不同的编译器。但这只是一个疯狂的猜测,无论如何我不知道如何检查这个以及接下来该做什么。有线索吗?
答案 0 :(得分:0)