1. 程式人生 > >無法將型別為“Shell32.ShellClass”的 COM 物件強制轉換為介面型別“Shell32.IShellDispatch 6”

無法將型別為“Shell32.ShellClass”的 COM 物件強制轉換為介面型別“Shell32.IShellDispatch 6”

今天想研究一下mp3 然後在輸出mp3長度的時候用瞭如下程式碼(網上搬得):

string file = "D:\\AccountDaemon\\My Music\\MyMusics\\Luxtos.mp3";
            ShellClass sh = new ShellClass();

            Folder dir = sh.NameSpace(Path.GetDirectoryName(file));

            FolderItem item = dir.ParseName(Path.GetFileName(file));

            string str = dir.GetDetailsOf(item, 27); // 獲取歌曲時長。

            Console.WriteLine(str);

然後出現了這個:

未經處理的異常:  System.InvalidCastException: 無法將型別為“Shell32.ShellClass”的 COM 物件強制轉換為介面型別“Shell32.IShellDispatch6”。此操作失敗的原因是對 IID 為“{286E6F1B-7113-4355-9562-96B7E9D64C54}”的介面的 COM 元件呼叫 QueryInterface 因以下錯誤而失敗: 不支援此介面 (異常來自 HRESULT:0x80004002 (E_NOINTERFACE))。

這個是因為vs自帶的Interop.Shell32.dll版本是1.0 太老了,於是在網上找到了1.2版本的,然後改成引用1.2版本。再將引用屬性裡面的 嵌入互操作型別  改為false 就行了

dll的下載地址:http://download.csdn.net/detail/u013529927/8812075