On Fri, Aug 04, 2017 at 02:54:15PM +0800, Jactry Zeng wrote:
diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c index 9e7127dfea..b77619d428 100644 --- a/dlls/shell32/tests/shlfolder.c +++ b/dlls/shell32/tests/shlfolder.c @@ -2519,6 +2521,120 @@ static void test_SHCreateShellItem(void) else win_skip("No SHCreateItemFromIDList\n");
+ /* SHCreateItemInKnownFolder */ + if(pSHCreateItemInKnownFolder) + { + WCHAR *desktop_path; + WCHAR testfile_path[MAX_PATH] = {0}; + HANDLE file; + WCHAR *displayname = NULL; + int order; + LPITEMIDLIST pidl_desktop_testfile = NULL; + + if(0) + { + /* crashes on Windows */ + pSHCreateItemInKnownFolder(NULL, 0, NULL, NULL, NULL); + pSHCreateItemInKnownFolder(&FOLDERID_Desktop, 0, NULL, NULL, NULL); + pSHCreateItemInKnownFolder(&FOLDERID_Desktop, 0, testfileW, &IID_IShellItem, NULL); + } + + shellitem = (void*)0xdeadbeef; + ret = pSHCreateItemInKnownFolder(&FOLDERID_Desktop, 0, NULL, &IID_IShellItem, + (void**)&shellitem); + ok(ret == S_OK, "SHCreateItemInKnownFolder failed: 0x%08x.\n", ret); + ok(shellitem != NULL, "shellitem was %p.\n", shellitem); + if(SUCCEEDED(ret)) + { + shellitem2 = (void*)0xdeadbeef; + ret = pSHCreateShellItem(NULL, NULL, pidl_desktop, &shellitem2); + ok(SUCCEEDED(ret), "SHCreateShellItem returned %x\n", ret); + if(SUCCEEDED(ret)) + { + ret = IShellItem_Compare(shellitem, shellitem2, 0, &order); + ok(ret == S_OK, "IShellItem_Compare failed: 0x%08x\n", ret); + ok(!order, "order got wrong value: %d\n", order); + IShellItem_Release(shellitem2); + } + IShellItem_Release(shellitem); + } + + /* Test with a non-existent file */ + shellitem = (void*)0xdeadbeef; + ret = pSHCreateItemInKnownFolder(&FOLDERID_Desktop, 0, testfileW, &IID_IShellItem, + (void**)&shellitem); + ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "Expected 0x%08x but SHCreateItemInKnownFolder return: 0x%08x.\n", + HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), ret); + ok(shellitem == NULL, "shellitem was %p.\n", shellitem); + + SHGetKnownFolderPath(&FOLDERID_Desktop, 0, NULL, &desktop_path);
It looks like SHGetKnownFolderPath is not available on WinXP, so you'll have to load it dynamically. OTOH I think SHCreateItemInKnownFolder() is available on all the platforms that we care about, so you can static link to that one. Huw.