PDA

Просмотр полной версии : [Помогите!] builder ХЕ3 [SHBrowseForFolder]


Dimedrol1536
12.10.2015, 18:33
void __fastcall TForm1::Action34Execute(TObject *Sender)
{
PBrowseInfoA bi;
memset(&bi, 0, sizeof(bi));

bi->ulFlags = BIF_STATUSTEXT;
bi->hwndOwner = Form1->Handle;
bi->lpszTitle = ("Выбор дериктории установки PointBlank:");

LPITEMIDLIST pidl=SHBrowseForFolderA(&bi);
if(pidl != NULL)
{
char buffer[_MAX_PATH] = {'0'};
if(::SHGetPathFromIDList(pidl, buffer) != 0)
{
data=buffer;
}
CoTaskMemFree(pidl);
}
}


Ругается тут

LPITEMIDLIST pidl=SHBrowseForFolderA(&bi);



E2034 Cannot convert '_browseinfoA * *' to '_browseinfoA *'
E2342 Type mismatch in parameter 'lpbi' (wanted '_browseinfoA *', got '_browseinfoA * *')


Не пойму из-за чего так. Может кто плодскажит.
На ХЕ8 не было ошибки.

Добавлено через 6 минут
LPITEMIDLIST pidl=SHBrowseForFolderA(&*bi);
LPITEMIDLIST pidl=SHBrowseForFolderA(*&bi);
LPITEMIDLIST pidl=SHBrowseForFolderA(*bi);
Всё приводит к Access violation.

Добавлено через 14 минут
Проблема решена.
Winapi::Shlobj::BROWSEINFO bi = {0};
bi.hwndOwner = Handle;
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
bi.lpszTitle = (wchar_t*)"Выбор дериктории:";
LPITEMIDLIST pidl = SHBrowseForFolder((_browseinfoA*)&bi);
if(pidl != NULL)
{
char buffer[_MAX_PATH] = {'0'};
if(::SHGetPathFromIDList(pidl, buffer) != 0)
{
//buffer;
}
CoTaskMemFree(pidl);
}