C++ || IShellItem GetDisplayName отсутствует / случайная буква диска
Я пытаюсь выбрать файл с помощью интерфейса IFileOpenDialog в C++, а затем копировать его путь в строку, которая будет отображаться в поле ввода.
Прежде всего, глобальная переменная, в которую я копирую строку, определяется так:
LPCTSTR getFilePath = NULL;
Это код для моей функции OpenDialog:
int CTestClassDlg::OpenDialogBox(){
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOpenDialog *pFileOpen;
// Create the FileOpenDialog object.
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL,
IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
if (SUCCEEDED(hr))
{
// Show the Open dialog box.
hr = pFileOpen->Show(NULL);
// Get the file name from the dialog box.
if (SUCCEEDED(hr))
{
IShellItem *pItem;
hr = pFileOpen->GetResult(&pItem);
if (SUCCEEDED(hr))
{
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
// Display the file name to the user.
if (SUCCEEDED(hr))
{
getFilePath = pszFilePath; //saves file path to global variable
CoTaskMemFree(pszFilePath);
}
pItem->Release();
}
}
pFileOpen->Release();
}
CoUninitialize();
}
return 0; }
И это код для копирования кода в поле редактирования, куда я хочу его поместить:
void CTestClassDlg::OnBnClickedButton3() { //Browse Button
int rtrn = OpenDialogBox();
if (rtrn == NULL) //If file selected, get path
{
SetDlgItemText(IDC_EDIT1, getFilePath);
} }
В то время как это копирует правильный полный путь в поле ввода, оно либо полностью пропускает букву диска, либо вместо него помещает, казалось бы, случайный символ.
Я понятия не имею, что может быть причиной этой проблемы, и поиск в Google или здесь не принес ничего полезного.
Надеюсь, что вы, ребята, можете мне помочь, так как я думаю, что это будет очень легко исправить, как только найден источник ошибки.
Заранее спасибо!