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 или здесь не принес ничего полезного.

Надеюсь, что вы, ребята, можете мне помочь, так как я думаю, что это будет очень легко исправить, как только найден источник ошибки.

Заранее спасибо!

0 ответов

Другие вопросы по тегам