我遇到了同样的问题,但没有一个解决方案有效。 OP 中发布的问题来自于包含课程:
class AFX_EXT_CLASS CMyClass : public CObject
{
public :
// ....
}
这是我想在控制台 exe 中使用的 dll 中的导出类。如果我在创建向导中将控制台应用程序创建为“使用 mfc”,那么这个
错误没有发生,但该选项会导致创建不同的应用结构。
无论如何,我尝试包含各种标题,以便它知道AFX_EXT_CLASS,定义它但没有任何效果。长话短说,解决方案是我们必须为应用程序启用 MFC 才能理解从 dll 导出的 MFC 类。我们如何做到这一点是通过编辑.vcproj文件并插入UseOfMFC="2"行,如下所示:
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="2" <-------------Insert this line here
CharacterSet="1"
还有#include <afx.h> 到 stdafx.h(我在第一个包含之前将它包含在右上角)。
现在重新引导、清理和构建错误应该会消失。
没有其他方法可以从项目设置中更改此选项。此选项不同于 Project Properties >> Configuration Properties >> General >> 'Use of MFC'。
更新
UseOfMFC="2" 技巧可能在其他地方有用,但显然如果您只是 #include <afx.h> 并将设置 project properties >> General >> 'Use of MFC' 更改为在共享 dll 中使用 MFC,那么这个错误就会消失。如果您不更改后面的设置,则会发生编译器错误
c:\program files (x86)\microsoft visual studio 8\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
更改这个实际上也会在项目文件中设置UseOfMFC="2",所以这是正确的方法。