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

时间:2008-08-03 02:48:43

标签: c++ visual-studio compatibility windows-nt

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

  

请使用/ MD开关进行_AFXDLL构建

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

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

5 个答案:

答案 0 :(得分:8)

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

有关背景信息,请参阅this thread

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

解决方法是修复多线程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。

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

答案 3 :(得分:1)

虽然我不熟悉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 ++项目吗?

希望其中一些可以帮助你。

答案 4 :(得分:-1)

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

请试试这个 “配置属性”,“常规”,“使用MFC”到“在静态库中使用MFC” “配置属性”,“常规”,“使用ATL”到“静态链接到ATL”

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

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