In the end, I wrote a small wrapper class that worked for me:
stdole.IPictureDisp iPictureDisp = row.Parent.Thumbnail;
pictureBox1.Image = IconTools.GetImage(iPictureDisp);
You want to use AxHost, as Hans mentioned. It was a little harder than I thought. Please note that you want to use AxHost.GetPictureFromIPicture, not GetPictureFromIPictureDisp.
About AxHost.GetPictureFromIPictureDisp:
. GetPictureFromIPicture, IPictureDisp , , IPictureDisp OLE - IPicture.
:
public class IconTools
{
private class IconToolsAxHost : System.Windows.Forms.AxHost
{
private IconToolsAxHost() : base(string.Empty) { }
public static stdole.IPictureDisp GetIPictureDispFromImage(System.Drawing.Image image)
{
return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);
}
public static System.Drawing.Image GetImageFromIPicture(object iPicture)
{
return GetPictureFromIPicture(iPicture);
}
}
public static stdole.IPictureDisp GetIPictureDisp(System.Drawing.Image image)
{
return IconToolsAxHost.GetIPictureDispFromImage(image);
}
public static System.Drawing.Image GetImage(stdole.IPicture iPicture)
{
return IconToolsAxHost.GetImageFromIPicture(iPicture);
}
public static System.Drawing.Image GetImage(stdole.IPictureDisp iPictureDisp)
{
return IconToolsAxHost.GetImageFromIPicture(iPictureDisp);
}
}