<div dir="ltr">Hi Huw,<div><br></div><div>SHCreateItemInKnownFolder() isn't available on WinXP and 2003 too.</div><div>I sent another try which loading SHGetKnownFolderPath() dynamically.</div><div><br></div><div>Thanks for review!</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-08-07 18:33 GMT+08:00 Huw Davies <span dir="ltr"><<a href="mailto:huw@codeweavers.com" target="_blank">huw@codeweavers.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, Aug 04, 2017 at 02:54:15PM +0800, Jactry Zeng wrote:<br>
> diff --git a/dlls/shell32/tests/<wbr>shlfolder.c b/dlls/shell32/tests/<wbr>shlfolder.c<br>
> index 9e7127dfea..b77619d428 100644<br>
> --- a/dlls/shell32/tests/<wbr>shlfolder.c<br>
> +++ b/dlls/shell32/tests/<wbr>shlfolder.c<br>
> @@ -2519,6 +2521,120 @@ static void test_SHCreateShellItem(void)<br>
> else<br>
> win_skip("No SHCreateItemFromIDList\n");<br>
><br>
> + /* SHCreateItemInKnownFolder */<br>
> + if(pSHCreateItemInKnownFolder)<br>
> + {<br>
> + WCHAR *desktop_path;<br>
> + WCHAR testfile_path[MAX_PATH] = {0};<br>
> + HANDLE file;<br>
> + WCHAR *displayname = NULL;<br>
> + int order;<br>
> + LPITEMIDLIST pidl_desktop_testfile = NULL;<br>
> +<br>
> + if(0)<br>
> + {<br>
> + /* crashes on Windows */<br>
> + pSHCreateItemInKnownFolder(<wbr>NULL, 0, NULL, NULL, NULL);<br>
> + pSHCreateItemInKnownFolder(&<wbr>FOLDERID_Desktop, 0, NULL, NULL, NULL);<br>
> + pSHCreateItemInKnownFolder(&<wbr>FOLDERID_Desktop, 0, testfileW, &IID_IShellItem, NULL);<br>
> + }<br>
> +<br>
> + shellitem = (void*)0xdeadbeef;<br>
> + ret = pSHCreateItemInKnownFolder(&<wbr>FOLDERID_Desktop, 0, NULL, &IID_IShellItem,<br>
> + (void**)&shellitem);<br>
> + ok(ret == S_OK, "SHCreateItemInKnownFolder failed: 0x%08x.\n", ret);<br>
> + ok(shellitem != NULL, "shellitem was %p.\n", shellitem);<br>
> + if(SUCCEEDED(ret))<br>
> + {<br>
> + shellitem2 = (void*)0xdeadbeef;<br>
> + ret = pSHCreateShellItem(NULL, NULL, pidl_desktop, &shellitem2);<br>
> + ok(SUCCEEDED(ret), "SHCreateShellItem returned %x\n", ret);<br>
> + if(SUCCEEDED(ret))<br>
> + {<br>
> + ret = IShellItem_Compare(shellitem, shellitem2, 0, &order);<br>
> + ok(ret == S_OK, "IShellItem_Compare failed: 0x%08x\n", ret);<br>
> + ok(!order, "order got wrong value: %d\n", order);<br>
> + IShellItem_Release(shellitem2)<wbr>;<br>
> + }<br>
> + IShellItem_Release(shellitem);<br>
> + }<br>
> +<br>
> + /* Test with a non-existent file */<br>
> + shellitem = (void*)0xdeadbeef;<br>
> + ret = pSHCreateItemInKnownFolder(&<wbr>FOLDERID_Desktop, 0, testfileW, &IID_IShellItem,<br>
> + (void**)&shellitem);<br>
> + ok(ret == HRESULT_FROM_WIN32(ERROR_FILE_<wbr>NOT_FOUND), "Expected 0x%08x but SHCreateItemInKnownFolder return: 0x%08x.\n",<br>
> + HRESULT_FROM_WIN32(ERROR_FILE_<wbr>NOT_FOUND), ret);<br>
> + ok(shellitem == NULL, "shellitem was %p.\n", shellitem);<br>
> +<br>
> + SHGetKnownFolderPath(&<wbr>FOLDERID_Desktop, 0, NULL, &desktop_path);<br>
<br>
It looks like SHGetKnownFolderPath is not available on WinXP, so<br>
you'll have to load it dynamically. OTOH I think SHCreateItemInKnownFolder()<br>
is available on all the platforms that we care about, so you can static link<br>
to that one.<br>
<span class="HOEnZb"><font color="#888888"><br>
Huw.<br>
<br>
<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Jactry Zeng</div><div><br></div></div></div>
</div>