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' の以前の定義を参照してください

これら 2 つのファイルを確認すると、次のことがわかります。

****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 の下位バージョンがインストールされているコードをビルドすると、これらの警告は表示されません。

これらの警告の原因は何ですか? どうすれば削除できますか?

4

1 に答える 1

0

この警告は、__declspec が異なる 2 つの宣言があるために発生します。WINCOMMCTRLAPI が __declspec 属性を非表示にしていると思います。

これを修正するには、まずこれらの宣言を両方ともインクルードする必要があることを確認します。異なるソース ファイルが誤って異なるインクルード パスを取得している可能性があります。または、古いバージョンを直接含めますか?次に、WINCOMMCTRLAPI の展開方法に影響を与えるマクロがビルドに定義されているかどうかを確認します。プロジェクトの設定が間違っている可能性があります。

于 2010-08-27T10:38:55.717 に答える