0

我可以使用 Windows 7 64 位上的所有服务包在 Visual C++ 6.0 的非 Unicode 调试模式下编译我的 32 位 ATL 项目(COM 库)。它在两种情况下都可以正常工作:如果正常运行或以管理员身份运行。

但非 Unicode Release 构建失败。

对于初学者,VC++ 编译器无法找到包含文件(例如 schannel.h,它位于另一个文件夹中,因为它属于 Platform SDK)。编译器在发布版本中仅扫描了 VC++ 本身的核心包含文件夹(尽管平台 SDK 的文件夹是在选项中指定的,并且无论如何在调试模式下都没有问题)。我试图将包含文件从 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 : missing ';' 在 '*' 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++ 包含文件夹,但它没有帮助。

再次,调试构建就好了。然后,我开始比较我正在使用的 Debug 和 Release MinDependency 非 unicode 构建的编译和链接选项,最后使它们相同。

我发现唯一让 VC++ 疯狂的是它在结果文件中放置的调试信息量。

简而言之。如果我使用 /Zl 开关(用于编辑和继续的程序数据库)进行编译,它可以工作。其他一切都失败了(包括程序数据库)。

早些时候,当我有 Win XP 时,我没有这样的问题。是否仍然可以在 Win7 64 位上使用旧的 VC++ 6.0?我迫切需要旧的 VC++,因为较新的 VC++ 在兼容性方面有太多问题(我也有 VS 2008,那里一切都很好,但即使它在 MinDependency 中链接,生成的 .DLL 也无法与一些非常旧的系统一起使用)。

我的猜测是,当使用 /Zl 开关时,VC++ 甚至可能使用不同的编译器。但这只是一个疯狂的猜测,无论如何我不知道如何检查这个以及接下来要做什么。有什么线索吗?

4

1 回答 1

0

呼,终于明白了!不知何故,额外的空间被添加到选项/目录中的每个路径,它阻止了 VC++ 找到一些包含或 lib 文件(这发生在不同的系统上,XP 和 7,也许,在目录路径的复制/粘贴过程中添加空格是典型的事物)。有趣的是,VC++ 在这方面是不一致的,并且更改构建模式可能会在编译器中激活不同的代码路径——一些路径会修剪目录名称,而另一些则不会。

于 2013-09-29T11:20:33.830 回答