не работает SHOpenFolderAndSelectItems на 64-bit
От: maks__  
Дата: 03.01.09 11:36
Оценка:
Пытаюсь выполнить такой код (обработка ошибок убрана).
    // Получаем интерфейс IShellFolder рабочего стола
    CComPtr<IShellFolder> pDesktopFolder;
    HRESULT hr = SHGetDesktopFolder(&pDesktopFolder); 
    
    // Преобразуем заданный путь в LPITEMIDLIST
    LPITEMIDLIST pidl = 0;
    hr = pDesktopFolder->ParseDisplayName(*g_pwndMain, NULL, L"C:\\1", NULL, &pidl, NULL);

    typedef HRESULT (WINAPI *LPSHOpen) (LPCITEMIDLIST pidlFolder,UINT cidl,LPCITEMIDLIST *apidl,DWORD dwFlags);

    HMODULE hModule = GetModuleHandle("shell32.dll");
    LPSHOpen pProc = (LPSHOpen) GetProcAddress( hModule, "SHOpenFolderAndSelectItems");
    hr = pProc(pidl, 0, 0, 0);

Моя программа 32-х битная. На XP 32-bit работает. На XP 64-bit вызов pProc(pidl, 0, 0, 0) просто завершает процесс. Такое ощущение, что SHOpenFolderAndSelectItems вызывает TerminateThread.
На Vista 64-bit показывается сообщение Class not registered.
Все функции отрабатывают без ошибок. Обработчик исключений тоже ничего не дает.

Если заменить SHOpenFolderAndSelectItems на SHAddToRecentDocs, то приложение не завершается и это сообщение не показывается.
В чем может быть причина такого поведения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.