我尝试迁移的MFC应用使用afxext.h
,导致_AFXDLL
设置,如果我设置/MT
会导致此错误:
请使用/ MD开关进行_AFXDLL构建
我迄今为止的研究表明,使用Visual Studio(在本例中为C ++)2005在Windows NT 4.0上构建应用程序是不可能的。
这是真的吗?有没有可用的解决方法?
答案 0 :(得分:8)
不,有许多使用VS2005构建的应用程序必须支持Windows XP,2000,NT,整个堆栈。问题是(默认情况下)VS2005想要使用NT上不存在的库/导出。
有关背景信息,请参阅this thread。
然后开始通过预处理器宏限制您的依赖项,并避免使用NT上不支持的API。
答案 1 :(得分:4)
要摆脱_AFXDLL错误,您是否尝试更改为使用MFC作为静态库而不是DLL的设置?这类似于您在将运行时库更改为静态而不是DLL时所做的操作。
答案 2 :(得分:3)
解决方法是修复多线程DLL。 Simple instructions。简短摘要:
运送8.0 C运行时库DLL(MSVCR80.DLL)不支持 NT 4.0 SP6只有一个原因和一个原因:微软有人 添加了一个函数调用
GetLongPathNameW
,该调用不存在 NT 4.0上的kernel32.dll。CRTLIB.C在第577行,呼叫
GetLongPathNameW
。只需将其替换为:ret = 0;
只在NT 4.0上使用此版本的MSVCR80.DLL。
一旦你有了这些工作,提出一个更通用的解决方案应该是微不足道的。
答案 3 :(得分:1)
虽然我不熟悉afxext.h,但我想知道它与Windows NT4不兼容......
然而,回答原来的问题: “我迄今为止的研究表明,使用Visual Studio(在本例中为C ++)2005年在Windows NT 4.0上构建应用程序是不可能的。”
答案应该是肯定的,特别是如果应用程序最初是在NT4上编写或运行的!除了afxext.h之外,这应该是一个简单的YES。
我遇到麻烦的另一件事是人们抛出NT术语的松散性。大多数人认为'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 ++项目吗?
希望其中一些可以帮助你。
答案 4 :(得分:-1)
这个想法是需要exe来链接到静态库。
请试试这个 “配置属性”,“常规”,“使用MFC”到“在静态库中使用MFC” “配置属性”,“常规”,“使用ATL”到“静态链接到ATL”
“配置属性”,“C \ C ++”,“代码生成”,“运行时库”到“多线程(\ MT)”
测试平台 构建机器:Window XP SP2上的Visual Studio 2005 客户端计算机:Window XP SP2(未安装VS2005)