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

Translate

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

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

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

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

This question and all comments follow the "Attribution Required."

所有的回答

Hugo Lee
Translate

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

看到这个线程对于某些背景。

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

来源
Translate

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

来源
Translate

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

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

来源
Translate

尽管我对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 ++项目吗?

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

来源
Maxwell Lee
Translate

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

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

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

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

来源
上一个问题:
c# -稳健随机数生成