C++ 是否使用Visual Studio 2005为Windows NT 4.0生成?

C++ 是否使用Visual Studio 2005为Windows NT 4.0生成?,c++,visual-studio,compatibility,windows-nt,C++,Visual Studio,Compatibility,Windows Nt,我正在尝试迁移的MFC应用程序使用afxext.h,这会导致设置\u afxdl,如果我设置/MT,则会导致此错误: 请对_afxdl生成使用/MD开关 到目前为止,我的研究表明,不可能使用VisualStudio(本例中为C++)2005构建一个在WindowsNT4.0上执行的应用程序 这是真的吗?有什么解决办法吗?没有,有许多使用VS2005构建的应用程序必须支持Windows XP、2000、NT以及整个堆栈。问题是(默认情况下)VS2005希望使用NT上不存在的库/导出 有关背景信息,

我正在尝试迁移的MFC应用程序使用
afxext.h
,这会导致设置
\u afxdl
,如果我设置
/MT
,则会导致此错误:

请对_afxdl生成使用/MD开关

到目前为止,我的研究表明,不可能使用VisualStudio(本例中为C++)2005构建一个在WindowsNT4.0上执行的应用程序


这是真的吗?有什么解决办法吗?

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

有关背景信息,请参阅


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

为了消除_afxdell错误,您是否尝试过更改设置以将MFC用作静态库而不是DLL?这与您将运行时libs改为静态而不是DLL的做法类似。

虽然我不熟悉afxext.h,但我想知道是什么原因导致它与Windows NT4不兼容

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

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

另一件让我感到麻烦的事是人们抛弃NT术语的松散性。诚然,大多数人认为“NT”是WindowsNT4,但它仍然模棱两可,因为“大多数人”并不等于“所有人”

实际上,“NT”一词等于NT系列。NT系列包括NT3、NT4、NT5(2000、XP、2003)和NT6(Vista)

Win32是一个子系统,您也可以将C/C++代码作为目标。因此,我看不出有什么理由不能针对这个NT4平台和子系统,或者,如果这是一个平台移植练习,那么就删除VC可能强加的MFC依赖项

将afxext.h添加到混合中,我觉得这就像是一个子系统兼容性问题。这是我谷歌研究中MFC的一部分。AFxExt.h看起来是MFC(微软基础类)扩展。

你能消除你对MFC的依赖吗?这是什么类型的应用程序?(CLR,Service,GUI接口?)可以在VC 8中转换项目到非托管C++项目吗?
希望其中的一些内容能对您有所帮助。

解决方法是修复多线程DLL。小结:

装运的8.0 C运行时库DLL(MSVCR80.DLL)不支持 NT4.0SP6只有一个原因:微软的某个人 向中不存在的
GetLongPathNameW
添加了一个函数调用 NT 4.0上的kernel32.dll

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


一旦这些功能正常工作,就可以想出一个更通用的解决方案。

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

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

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

试验台 生成计算机:WindowsXPSP2上的VisualStudio2005
客户端计算机:Windows XP SP2(未安装VS2005)

使此问题令人困惑的是,如果您使用静态链接,实际上只会拉入您使用的符号所需的对象文件,这就是为什么它在大多数情况下在NT4上工作的原因。请有人对此加以保护。