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

时间:2020-03-05 18:37:23  来源:igfitidea点击:

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

Please use the /MD switch for _AFXDLL builds

到目前为止,我的研究表明,不可能使用Visual Studio(在这种情况下为C ++)2005构建要在Windows NT 4.0上执行的应用程序。

这是真的吗?有没有其他解决方法?

解决方案:

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

有关某些背景,请参见此线程。

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

为了摆脱_AFXDLL错误,我们是否尝试过更改设置以将MFC用作静态库而不是DLL?这类似于将运行时库更改为静态而不是DLL时已经执行的操作。

尽管我对afxext.h不熟悉,但我想知道它如何与Windows NT4不兼容...。

但是,要回答原始问题:
"到目前为止,我的研究表明不可能使用Visual Studio(在这种情况下为C ++)2005来构建要在Windows NT 4.0上执行的应用程序。"

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

我发现麻烦的另一件事是人们放弃新约术语的松散性质。当然,大多数人都将" 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。简单说明。简短的摘要:

The shipping 8.0 C Runtime Library DLL (MSVCR80.DLL) does not support
  NT 4.0 SP6 for one reason and one reason only: someone at Microsoft
  added a function call to GetLongPathNameW which does not exist in
  kernel32.dll on NT 4.0.
  
  CRTLIB.C   On line 577, there is a call to GetLongPathNameW.  simply replace it with: ret = 0;
  only use this build of MSVCR80.DLL on NT 4.0.

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

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

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

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

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