• 解决方法:Unable to cast COM object of type 'Shell32.ShellClass' to interface 'Shell32.IShellDispatch5'


    场景回顾:

    我需要做一个功能,很简单,就是显示出本地所有的网络连接

    比如在我的网络连接里有以下的items。

    代码里需要引用:Interop.Shell32.dll 这个dll

    解决方案:

    VS 里面的Interop.Shell32.dll(1.0) 这个版本太低了,需要重新到别的网站下过比这个高的版本(我使用的是1.2.107.0)

    解决过程:

    我下面的代码就是找出所有上面的网络连接名字(有些人会推荐叫我用WMI,对 这个找出这个很easy,但是WMI 没法做我的一些进一步的需求。)

                Shell32.Shell shell = new Shell32.ShellClass();
                Shell32.Folder folder = shell.NameSpace(49);
    
                foreach (Shell32.FolderItem myItem in folder.Items())
                {
                    listBox1.Items.Add(myItem.Name);
                }

    然后 开始测试,因为我用的是Win 7 +VS 2010 所有结果很perfect ,看下图:

    看,上面全部出来了。很正确,很开心,然后我就到XP 系统下面测试,悲剧了出现了下面的exception,

    没办法啦,只好baidu或者google咯,就在老外的一篇文章中知道说到:Since I was developing under Vista, the RCW naturally assumed I wanted the latest interface (Shell32.IShellDispatch5). Windows XP only supports the Shell32.IShellDispatch4 interface.

    指的是老外在Vista环境做的开发,因为Vista版本比XP的高,所以Xp不支持Shell32.IShellDispatch5,只支持Shell32.IShellDispatch4,ok,我进行转换了,

     var shell = (Shell32.IShellDispatch4)new Shell32.ShellClass();

    可结果还是不行。

    后来,想起是不是版本问题???、然后去重新下载了新的版本。。

    我下来之后,有2个版本,在VS2010里的用的是第一个版本。请看:

    后来我换成1.2.107 这个版本的,然后就ok啦。。

    原因也就是上面的老外说的,版本问题。

    作者:Lanny☆兰东才
    出处:http://www.cnblogs.com/damonlan
    Q Q:*********
    E_mail:Damon_lan@163.com or Dongcai.lan@hp.com

    本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。

  • 相关阅读:
    Snapshot--使用脚本创建快照
    Mirror--日志流压缩
    Mirror--如何TSQL查看镜像状态和镜像相关存储过程
    Mirror--如何对运行中的镜像端点更换证书
    Mirror--程序访问镜像数据库的超时机制
    oozie客户端常用操作命令
    oracle数据库表空间的创建与使用
    Idea创建sbt项目
    Idea配置sbt(window环境)
    使用Idea从github上获取项目
  • 原文地址:https://www.cnblogs.com/damonlan/p/2964144.html
Copyright © 2020-2023  润新知