最近在做一个C#项目时需要用到一个ActiveX控件,控件中使用的图片&字体对象分别为stdPicture&stdFont 和 Image、Font无法直接转换,后来在网上查了很多资料找到如下方法

       [DllImport("oleaut32.dll", CharSet = CharSet.Unicode, PreserveSig =
             true, EntryPoint = "OleLoadPictureFile")]
        static extern void OleLoadPictureFile(Object varObj,[ MarshalAs(
                                                                  UnmanagedType.IDispatch )] out Object oOut);
        private void axGridControl1_OnDraw(object sender,
           AxINAGRIDLib.IGridControlEvents_OnDrawEvent e)
        {
            System.String strFile;
            strFile = "C:DevelInabyteInagridSamplesVSNetCSharpInaOwnerDrawicon.bmp";
            Object lpDisp = null;
            OleLoadPictureFile((Object) strFile, out lpDisp);
            StdType.StdPicture pic = (StdType.StdPicture)lpDisp;
        }

这种方法比较麻烦,我没有试过,有兴趣的网友可以试一下

在解决其它问题时发现了FrameWork中有个命名空间Microsoft.VisualBasic.Compatibility专门解决VB6的兼容性问题,经研究收获如下

Microsoft.VisualBasic.Compatibility.VB6.IPictureToImage()
    Microsoft.VisualBasic.Compatibility.VB6.ImageToIPicture()
    Microsoft.VisualBasic.Compatibility.VB6.IFontToFont()
    Microsoft.VisualBasic.Compatibility.VB6.FontToIFont()

这个方法已经经过测试,可以使用