|
제가 사용하려는 함수는 SHGetPathFromIDList(...) 입니다.
directory 선택하는 Dialog를 제공해 주는 함수이지요.
이 함수를 사용하기 위해 #include <shlobj.h> 했는데요.
[C++ Error] shlobj.h(1762): E2238 Multiple declaration for 'FVSHOWINFO'
[C++ Error] shlobj.h(1936): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shlobj.h(3717): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Error] shlobj.h(4808): E2238 Multiple declaration for 'SHELLFLAGSTATE'
이런 에러가 여러개 납니다.
어떻게 사용해야 하는 건지.
빌더에서 sdk를 사용하는 방법이 잘못 된건지요?
답변 부탁드릴께요.
참고로 제가 작성한 코드는 아래와 같구요 VC++에서는 문제가 없던 코드랍니다.
###########################################################################
String TSetupFrm::GetPathName(void)
{
LPMALLOC g_pMalloc;
ITEMIDLIST *Pidl, *BrowsePidl;
char DisplayName[MAX_PATH];
BROWSEINFO BrowseInfo;
String sPathName="";
// IMalloc인터페이스의 포인터를 가져온다.
SHGetMalloc(&g_pMalloc);
// 스페셜폴더의 위치를 피들로 리턴해주는 함수입니다.
SHGetSpecialFolderLocation(this->Handle , CSIDL_DESKTOP , &Pidl);
// BROWSEINFO 구조체의 내용을 채웁니다.
BrowseInfo.hwndOwner = this->Handle;
BrowseInfo.pidlRoot = Pidl;
BrowseInfo.pszDisplayName = DisplayName;
BrowseInfo.lpszTitle = "Data가 저장될 장소를 선택하십시오.";
BrowseInfo.lpfn = NULL;
BrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_RETURNFSANCESTORS ;
// 채워진 구조체로 SHBrowseForFolder를 호출합니다.
if( (BrowsePidl=SHBrowseForFolder(&BrowseInfo))!=NULL )
{
if( SHGetPathFromIDList(BrowsePidl, DisplayName)!=FALSE )
sPathName= BrowseInfo.pszDisplayName;
else
Application->MessageBox("That is not a part of file system", "error", MB_OK);
}
// 사용한 피들들을 해제한다.
g_pMalloc->Free(Pidl);
g_pMalloc->Free(BrowsePidl);
// IMalloc인터페이스를 놓아준다.
g_pMalloc->Release();
return sPathName;
}
|