zoukankan      html  css  js  c++  java
  • 解决方法: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

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

  • 相关阅读:
    【react native】有关入坑3个月RN的心路历程
    【react-native】持续踩坑总结
    【react native】rn踩坑实践——从输入框“们”开始
    【CSS】少年,你想拥有写轮眼么?
    【杂谈】小记一个ios11的bug
    基于MATLAB&摄像头的实时目标跟踪
    WebRTC 音频模块单独编译 --【转载】
    高斯分布--转载
    win 7 64位 下 VMware Ubantu 14.04 设置共享文件夹失败
    GMM算法
  • 原文地址:https://www.cnblogs.com/damonlan/p/2964144.html
Copyright © 2011-2022 走看看