나는 팝업와 잘 작동 할 수있는 SHBrowseForFolder을 가지고,하지만 난 제목을 설정하고 싶습니다. 나는 그것이 wchar_t *이어야한다는 것을 알고 있고 (wchar_t *) L "My Title"과 같은 const를 사용할 때 제목이 정확하다는 것을 알 수있다. 나는 첫 번째 문자 'M'을 얻을 문자열 값을 사용하려고하면 넓은 문자열이 NUL로 각 문자를 pading, 다시 한 번 새로운 넓은 문자열로 변환 된 것처럼C++ 빌더 XE2 : wchar_t에 문자열로 변환하는 방법 *
는하지만, 그것은이다.
는Winapi::Shlobj::BROWSEINFO bi = {0};
bi.hwndOwner = Handle;
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
bi.lpszTitle = String("My Title").w_str(); // This only shows the 'M'
//bi.lpszTitle = (wchar_t*)"My Title"; // This shows the full string 'My Title'
LPITEMIDLIST pidl = SHBrowseForFolder((_browseinfoA*)&bi);
if (pidl != 0) {
// free memory used
IMalloc *imalloc = 0;
if (SUCCEEDED(SHGetMalloc(&imalloc))) {
imalloc->Free(pidl);
imalloc->Release();
}
}
UnicodeString 모든 변환 함수 c_str()
, t_str()
및 w_str()
모든 문서는 wchar_t*
반환하지만 선언은 WideChar*
을 보여줍니다.
이 코드를 String과 함께 사용하는 방법에 대한 아이디어가 있으십니까?
. 음, String은 간단한 코드 예제를 보여줄뿐입니다 ... 내 실제 코드는'bi.lpszTitle = Edit-> TextHint.w_str();'이며 설명과 함께 잘 작동합니다. 고맙습니다. –
사용중인 임시 String 변수에 동일한 문제가 있습니다. 대신 명시 적 변수를 사용하십시오 :'String TextHint = Edit-> TextHint; bi.lpszTitle = TextHint.c_str(); ' –
구현이 어떻게 문제가 될지 모르겠습니까? 'Edit'는 폼에 의해 생성 된 VCL 포인터이며 폼이 파기되지 않는 한 유효합니다. '에 의해 반환 된 포인터.w_str()'은 문자열을 조작하지 않는 한 유효합니다 (문서 관련). 'SHBrowseForFolderW'는 모달이므로 어쨌든 돌아올 때까지 아무 일도 일어나지 않을 것입니다. 어떻게 Edit-> Text.w_str()을 사용하는 것이 잘못 될 수 있습니까? –