2008/01/16

C++ Builder 에서 SHGetFolderPath API 사용하기

폰트 폴더 경로를 얻기 위해 SHGetFolderPath 함수를 이용하려했는데 자꾸만 에러가 발생했다.

//Code
#include <shfolder.hpp>
#include "shlobj.h"

char szPath[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_FONTS, NULL, 0, szPath);

// Error
[C++ Error] shobjidl.h(2372): E2238 Multiple declaration for
'FOLDERSETTINGS'
[C++ Error] shobjidl.h(8279): E2238 Multiple declaration for
'DESKBANDINFO'
[C++ Error] shlobj.h(1487): E2238 Multiple declaration for
'FVSHOWINFO'
[C++ Warning] shlobj.h(3487): W8017 Redefinition of
'DI_GETDRAGIMAGE' is not identical
[C++ Error] shlobj.h(4992): E2238 Multiple declaration for
'SHELLFLAGSTATE'


이유는 아직 모르겠고 해결책은 프로젝트 옵션에서 Path and Defines 의 Conditional Defines에 NO_WIN32_LEAN_AND_MEAN을 추가해 주는 것이다. 소스상에 #define 하면 안된다. 전역으로 적용되도록 프로젝트 옵션에 추가해야 한다.

예전에 Shell Controls를 수동으로 설치할 때 봤던 건데 NO_WIN32_LEAN_AND_MEAN이 뭐하는 녀석인지 파악해 봐야겠다. (혹시 이 포스팅을 보시는 분들중 아시는 분 있으시면 댓글 부탁드립니다.)

Original Post : http://neodreamer-dev.tistory.com/38

No comments :

Post a Comment