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

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

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

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

===============>>#1 票数:9

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

有关背景,请参见此线程

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

===============>>#2 票数:4

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

===============>>#3 票数:3

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

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

===============>>#4 票数:1

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

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

===============>>#5 票数:-1

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

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

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

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

  ask by Isaac Moses translate from so

未解决问题?本站智能推荐: