当我构建我的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的代码,则不会显示这些警告。
导致这些警告的原因是什么?我该如何删除它们?
答案 0 :(得分:0)
该警告来自两个具有不同__declspec的声明。我希望WINCOMMCTRLAPI隐藏__declspec属性。
要修复它,首先检查是否需要同时包含这两个声明 - 也许不同的源文件错误地拾取不同的包含路径?或直接包括旧版本?第二步检查构建中是否定义了影响WINCOMMCTRLAPI扩展方式的宏。可能是项目设置设置错误。