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

问题描述:

我想要迁移的MFC应用程序使用afxext.h,这将导致_AFXDLL才能完成设置,这将导致这个错误,如果我设置/MT使用Visual Studio 2005为Windows NT 4.0构建?

请使用/ MD开关_AFXDLL建立

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

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

+1

有人请亲这个。 – 2015-02-04 14:11:15

不,使用VS2005构建的许多应用程序必须支持Windows XP,2000,NT,整个堆栈。问题在于(默认情况下)VS2005希望使用NT中不存在的库/导出。

请参阅this thread了解一些背景知识。

然后开始通过预处理器宏来限制依赖关系,并避免在NT上不支持的API。

+0

这个问题引起混淆的原因是,如果你使用静态链接,实际上只有你使用的符号需要的目标文件被引入,这就是为什么它大多数时候在NT4上工作。 – 2012-05-13 04:49:48

要摆脱_AFXDLL错误,您是否尝试更改为使用MFC作为静态库而不是DLL的设置?这与您将运行时库更改为静态而不是DLL时所做的相似。

虽然我不熟悉afxext.h,我想知道它是什么使得它与Windows NT4不兼容....

然而,要回答原来的问题: “我的研究,以日期表示不可能在Windows NT 4.0上使用Visual Studio(本例中为C++)构建一个执行应用程序。“

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

我发现麻烦的另一件事是人们抛出新台币这个宽松的本质。大多数人认为'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++项目?

希望有一些会帮助你。

解决方法是修复多线程DLL。 Simple instructions。简短的摘要:

航运8.0 C运行时库DLL(MSVCR80.DLL)不支持 NT 4.0 SP6的原因之一,另一个原因只是:有人在微软 增加了一个函数调用GetLongPathNameW不存在在NT 4.0上的 kernel32.dll。

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

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

这个想法是exe需要链接到静态库。 “配置属性”,“常规”,“使用MFC”到“在静态库中使用MFC” 到ATL”

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

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