0

当我构建我的 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);

#万一 };

在 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 的位置构建代码,则不会显示这些警告。

是什么导致了这些警告?我怎样才能删除它们?

4

1 回答 1

0

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

To fix it, first check that you need to get both of those declarations included - perhaps different source files are picking up different include paths erroneously? Or directly including an old version? Second check if there is a macro defined in your build that affects how WINCOMMCTRLAPI is expanded. It may be there is a project setting that has got set wrong.

于 2010-08-27T10:38:55.717 回答