繁体   English   中英

使用 Visual Studio 2005 为 Windows NT 4.0 构建?

[英]Build for Windows NT 4.0 using Visual Studio 2005?

我尝试迁移的 MFC 应用程序使用afxext.h ,这会导致_AFXDLL被设置,如果我设置/MT会导致此错误:

请为 _AFXDLL 构建使用 /MD 开关

我迄今为止的研究表明,不可能使用 Visual Studio(在本例中为 C++)2005 构建在 Windows NT 4.0 上执行的应用程序。

这是真的吗? 有没有可用的解决方法?

不,有许多使用 VS2005 构建的应用程序必须支持 Windows XP、2000、NT 和整个堆栈。 问题是(默认情况下)VS2005 想要使用 NT 上不存在的库/导出。

有关一些背景,请参阅此线程

然后开始通过预处理器宏限制您的依赖项,并避免使用 NT 不支持的 API。

为了摆脱 _AFXDLL 错误,您是否尝试更改设置以使用 MFC 作为静态库而不是 DLL? 这类似于您在将运行时库更改为静态而不是 DLL 时已经在做的事情。

解决方法是修复多线程DLL。 简单的说明 简短的摘要:

发布的 8.0 C 运行时库 DLL (MSVCR80.DLL) 不支持 NT 4.0 SP6,原因只有一个:Microsoft 的某人添加了一个对GetLongPathNameW的函数调用,该函数调用在 NT 4.0 上的 kernel32.dll 中不存在。

CRTLIB.C 在第 577 行,有一个对GetLongPathNameW的调用。 只需将其替换为: ret = 0; 仅在 NT 4.0 上使用此版本的 MSVCR80.DLL。

一旦你让这些工作,想出一个更通用的解决方案应该是微不足道的。

虽然我不熟悉 afxext.h,但我想知道它与 Windows NT4 不兼容的原因是什么......

但是,要回答最初的问题:“我迄今为止的研究表明,不可能使用 Visual Studio(在本例中为 C++)2005 构建在 Windows NT 4.0 上执行的应用程序。”

答案应该是肯定的,特别是如果应用程序最初是在 NT4 上编写或运行的! 除了 afxext.h 之外,这应该是一个简单的 YES。

我发现麻烦的另一件事是人们抛弃 NT 术语的松散性质。 诚然,大多数人认为“NT”是 Windows NT4,但它仍然含糊不清,因为“大多数人”不等于“所有人”。

实际上,术语“NT”等于NT 系列。 NT系列有NT3、NT4、NT5(2000、XP、2003)和NT6(Vista)。

Win32 是一个子系统,您也可以将 C/C++ 代码作为目标。 所以我认为没有理由不能针对这个 NT4 平台和子系统,或者,如果这是一个平台移植练习,删除 VC 可能强加的 MFC 依赖项。

将 afxext.h 添加到组合中,对我来说听起来像是子系统兼容性问题。 它是我 Google 研究中 MFC 的一部分。 afxext.h 似乎是 MFC(Microsoft 基础类)扩展。

你能消除对 MFC 的依赖吗? 这是什么类型的应用程序? (CLR、服务、GUI 界面?)你能在 VC 8.0 中将项目转换为非托管 C++ 项目吗?

希望其中的一些内容可以帮助您。

这个想法是需要exe来链接到静态库。

请尝试此“配置属性”、“常规”、“MFC 的使用”到“在静态库中使用 MFC”“配置属性”、“常规”、“ATL 的使用”到“ATL 的静态链接”

“配置属性”、“C\\C++”、“代码生成”、“运行库”到“多线程(\\MT)”

测试平台构建机器:Windows XP SP2 上的 Visual Studio 2005 客户端机器:Window XP SP2(未安装 VS2005)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM