使用Visual Studio 2005构建Windows NT 4.0吗?
我要迁移的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)