解决方法:Unable to cast COM object of type 'Shell32.ShellClass' to interface 'Shell32.IShellDispatch5'
2013-03-17 02:12 随风浪迹天涯 阅读(3874) 评论(6) 编辑 收藏 举报场景回顾:
我需要做一个功能,很简单,就是显示出本地所有的网络连接
比如在我的网络连接里有以下的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啦。。
原因也就是上面的老外说的,版本问题。
出处:http://www.cnblogs.com/damonlan
Q Q:*********
E_mail:Damon_lan@163.com or Dongcai.lan@hp.com
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。