解決方法: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啦。。

原因也就是上面的老外說的,版本問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM