<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>