Mfc 升级到Visual Studio 2019后未解析的外部符号ATL::IATLEMMGR

Mfc 升级到Visual Studio 2019后未解析的外部符号ATL::IATLEMMGR,mfc,linker-errors,visual-studio-2019,atl,Mfc,Linker Errors,Visual Studio 2019,Atl,我目前正在将我们的源代码从VS2012升级到VS2019。使用MFC的一个项目未成功链接: 致命错误LNK1120:4个未解析的外部 错误LNK2001:函数“public:virtual struct ATL::CStringData*\uu cdecl ATL::CAtlStringMgr::Allocate(int,int)”中引用了未解析的外部符号“public:void*\uu cdecl ATL::iatlmmgr::Allocate(unsigned u int64)” 错误LNK

我目前正在将我们的源代码从VS2012升级到VS2019。使用MFC的一个项目未成功链接:

致命错误LNK1120:4个未解析的外部

错误LNK2001:函数“public:virtual struct ATL::CStringData*\uu cdecl ATL::CAtlStringMgr::Allocate(int,int)”中引用了未解析的外部符号“public:void*\uu cdecl ATL::iatlmmgr::Allocate(unsigned u int64)”

错误LNK2001:函数“public:virtual void\uu cdecl ATL::IAtlMemMgr::Free(void*)”中引用了未解析的外部符号“public:void\uu cdecl ATL::CAtlStringMgr::Free(struct ATL::CStringData*)”

错误LNK2001:函数“public:virtual struct ATL::CStringData*”中引用了未解析的外部符号“public:void*\uu cdecl ATL::IAtlMemMgr::reallocation(void*,unsigned uu int64)”public:virtual struct ATL::CStringData*\uu cdecl ATL::CAtlStringMgr::reallocation(struct ATL::CStringData*,int,int)

错误LNK2001:未解析的外部符号“public:virtual struct ATL::CStringData*\uu cdecl ATL::IAtlStringMgr::reallocation(struct ATL::CStringData*,int,int)”

我们正在构建多字节字符集(MBCS)。我的第一个想法是,我们缺少mbcs库。但如前所述,这些库是默认安装的,“当您选择MFC和ATL支持时”

我在代码中添加了atls.lib,并手动添加了atls.lib作为附加依赖项,但这并没有解决问题

我怎样才能找出丢失了哪个库

编辑1: 让我们看看ATLMEM。H:

据我所知,这是一个没有找到的符号。由于关键字可能是红色的,它隐式地使函数纯虚拟的。这些链接器错误可能是由非纯虚函数声明引起的


是否有一个bug使得_接口中的函数不是纯虚拟的?

在排除了几乎所有的源文件并注释了许多功能之后,我可以看到链接器错误与
相关。将
移动到每个源文件的顶部将删除链接器错误。
但是,我很想知道为什么与VS2019相比,使用VS2012编译会产生另一种行为。

如果这是唯一未解决的外部问题,请尝试更改编译器选项。使用C++,参数类型会被标记成符号名。不匹配将导致无法找到相应的符号。从/Zc:wchar__t更改为/Zc:wchar__t-并返回没有解决错误satlmem.h和atlsimpstr.h?添加了atlmem.h和atlsimpstr.h,但仍然存在错误。我开始相信这些符号应该在atls.lib中,但不管出于什么原因,它们都不是。我建议您可以尝试添加
atls.lib
。根据。当项目引用了一个库(.LIB)或对象(.OBJ)文件,而该文件又需要来自另一个库的符号时。即使不调用导致依赖关系的函数,也可能发生这种情况。若要解决此问题,请将对其他库的引用添加到项目中。我确信这不是真的,VS2012不关心包含顺序。在C++语言中,必须在使用之前定义事物。如果必须将afxwin.h放在顶部,这一定意味着其中一个include文件中发生了更改。例如,另一个包含文件先前包含aftwin.h,但不再包含它。
    __interface __declspec(uuid("654F7EF5-CFDF-4df9-A450-6C6A13C622C0")) IAtlMemMgr{
    public:
        _Ret_maybenull_ _Post_writable_byte_size_(nBytes) void* Allocate(_In_ size_t nBytes) throw();