【问题标题】:Linking errors on VS2012 for CImageList and CBitmap apisCImageList 和 CBitmap api 在 VS2012 上的链接错误
【发布时间】:2015-05-21 08:14:08
【问题描述】:

我在我的项目中使用 mfc 类 CImageList 并使用它的 API,如 Add()、Create() 等。它适用于 vs2010。 现在,我正在将项目升级到 vs2012。它在 32 位平台上编译和链接正常,但在 64 位平台下会抛出以下链接错误。

File1.obj : error LNK2019: unresolved external symbol imp_ImageList_ReplaceIcon 在函数“public: int __cdecl CImageList::Add(struct HICON *)”中引用

File2.obj : 错误 LNK2019: 函数“public: int __cdecl CImageList::Add(class CBitmap *,unsigned long)”中引用的无法解析的外部符号 __imp_ImageList_AddMasked

同样,调用 CBitmap api 也会抛出以下错误。

File2.obj:错误 LNK2019:函数“public: int __cdecl CBitmap::LoadMappedBitmap(unsigned int,unsigned int,struct _COLORMAP *,int)”中引用的未解析的外部符号 __imp_CreateMappedBitmap

似乎具有这些实现的库可能已更改。但是,我找不到任何关于如何解决它们的线索。

【问题讨论】:

  • 您是否要编译 MFC?链接器错误似乎出现在 MFC 方法上,而不是您的代码上。或者 File1.cpp 是否包含 CImageList 的 MFC 源的副本?
  • File1.cpp 包含对 MFC API 的调用。下面是我的代码的 sn-p。 CImageList m_imgList; m_imgList.Create(16, 16, ILC_MASK, 4,4); m_imgList.Add(AfxGetApp()->LoadIcon(ID_ICON_UNCHECKED)); m_imgList.Add(AfxGetApp()->LoadIcon(ID_ICON_CHECKED)); m_ListCtrl.SetImageList(&m_imgList, LVSIL_STATE | LVSIL_NORMAL);
  • 语句出现链接错误:“m_imgList.Add(AfxGetApp()->LoadIcon(ID_ICON_UNCHECKED));”。它为 32 位平台正确链接。

标签: visual-studio-2012 mfc


【解决方案1】:

终于找出了这个错误的原因。

ImageList_ReplaceIcon 和 CreateMappedBitmap 符号存在于 comctl32.lib 中。
在我的项目设置的附加包含目录中包含的路径中存在旧版本 comctl32.lib。

因此,链接器不是从 Microsoft SDK 文件夹中选择此库,而是从该目录中选择,因此会导致问题。

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2012-12-17
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多