如何删除'ImageList_Read':不一致的dll链接警告?

时间:2010-08-27 08:31:28

标签: c++ visual-c++ dll compiler-warnings linkage

当我构建我的Visual C ++解决方案(2005)时,我收到以下警告

1> c:\ winddk \ 7000.0.winmain_win7beta.081212-1400 \ inc \ api \ commctrl.h(678):参见'ImageList_Read'的先前定义

1> e:\ xml parse \ development \ gui \ h \ wtl4mfc.h(6):警告C4273:'ImageList_Write':不一致的dll链接

1> c:\ winddk \ 7000.0.winmain_win7beta.081212-1400 \ inc \ api \ commctrl.h(679):参见'ImageList_Write'的先前定义

1> e:\ xml parse \ development \ gui \ h \ wtl4mfc.h(8):警告C4273:'ImageList_ReadEx':不一致的dll链接

1> c:\ winddk \ 7000.0.winmain_win7beta.081212-1400 \ inc \ api \ commctrl.h(686):参见'ImageList_ReadEx'的先前定义

1> e:\ xml parse \ development \ gui \ h \ wtl4mfc.h(9):警告C4273:'ImageList_WriteEx':不一致的dll链接

1> c:\ winddk \ 7000.0.winmain_win7beta.081212-1400 \ inc \ api \ commctrl.h(687):参见先前对'ImageList_WriteEx'的定义

当我检查这两个文件时,我可以看到以下内容:

****在wtl4mfc.h ****

extern“C” {     HIMAGELIST WINAPI ImageList_Read(LPSTREAM pstm);     BOOL WINAPI ImageList_Write(HIMAGELIST himl,LPSTREAM pstm);

#if(_WIN32_WINNT> = 0x0501)     HRESULT WINAPI ImageList_ReadEx(DWORD dwFlags,LPSTREAM pstm,REFIID riid,PVOID * ppv);     HRESULT WINAPI ImageList_WriteEx(HIMAGELIST himl,DWORD dwFlags,LPSTREAM pstm);

#ENDIF };

在commctrl.h 文件中,我可以看到以下内容:

WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Read(__ in struct IStream * pstm); WINCOMMCTRLAPI BOOL WINAPI ImageList_Write(__ in HIMAGELIST himl,__ in struct IStream * pstm);

我是Visual C ++的初学者,这是来自我可以维护的代码。我该如何删除这些警告?如果我构建安装了较低版本Winddk的代码,则不会显示这些警告。

导致这些警告的原因是什么?我该如何删除它们?

1 个答案:

答案 0 :(得分:0)

该警告来自两个具有不同__declspec的声明。我希望WINCOMMCTRLAPI隐藏__declspec属性。

要修复它,首先检查是否需要同时包含这两个声明 - 也许不同的源文件错误地拾取不同的包含路径?或直接包括旧版本?第二步检查构建中是否定义了影响WINCOMMCTRLAPI扩展方式的宏。可能是项目设置设置错误。