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.
Hi Huw,
SHCreateItemInKnownFolder() isn't available on WinXP and 2003 too. I sent another try which loading SHGetKnownFolderPath() dynamically.
Thanks for review!
2017-08-07 18:33 GMT+08:00 Huw Davies huw@codeweavers.com:
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.