WPF IShellItemImageFactory GetImage为空

时间:2017-02-23 15:06:30

标签: c# c++ wpf

我有一个需要显示图标缩略图的WPF应用程序。 我正在使用IShellItemImageFactory接口,下面是代码:

    private static IntPtr GetHBitmap(string fileName, int width, int height, SIIGBF options) {
        IShellItem nativeShellItem;
        Guid shellItem2Guid = new Guid(IShellItem2Guid);
        int retCode = SHCreateItemFromParsingName(fileName, IntPtr.Zero, ref shellItem2Guid, out nativeShellItem);

        if (retCode != 0) {
            return IntPtr.Zero;
        }
            //throw Marshal.GetExceptionForHR(retCode);

        NativeSize nativeSize = new NativeSize();
        nativeSize.Width = width;
        nativeSize.Height = height;

        IntPtr hBitmap;
        HResult hr = ((IShellItemImageFactory)nativeShellItem).GetImage(nativeSize, options, out hBitmap);

        Marshal.ReleaseComObject(nativeShellItem);

        if (hr == HResult.Ok) return hBitmap;

        return IntPtr.Zero;
        //throw Marshal.GetExceptionForHR((int)hr);
    }

使用以下代码获取图标:

 IntPtr hBitmap = GetHBitmap(fullPath, 24, 24, 
                ShellUtilities.SIIGBF.SIIGBF_INCACHEONLY | ShellUtilities.SIIGBF.SIIGBF_BIGGERSIZEOK);

问题是有些图像很大而缩略图没有被缓存,在这种情况下函数应该返回null,因为我正在请求INCACHEONLY。

我试图在C ++中实现它,函数返回NULL,这是正常的,因为图像没有被缓存。 但是在这种情况下,C#方法返回一个空图像,所以请确定问题是什么。

有没有人知道这方面的解决方案?

0 个答案:

没有答案