无法将类型为“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

时间: 2024-10-04 19:14:33

无法将类型为“Shell32.ShellClass”的 COM 对象强制转换为接口类型“Shell32.IShellDispatch 6”的相关文章

C#WPF无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“System.Speech.Internal.SapiInterop.ISpDataKey”。解决办法

this.speecher.SpeakAsync(textToSpeak); // 报错 无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类型"System.Speech.Internal.SapiInterop.ISpDataKey".此操作失败的原因是对 IID 为"{14056581-E16C-11D2-BB90-00C04F8EE6C0}"的接口的 COM 组件调用 QueryInterface 因以下错

无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型,原因为没有注册类

错误描述 e = {"无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类型"OpcRcw.Da.IOPCServer".此操作失败的原因是对 IID 为"{39C13A4D-011E-11D0-9675-0020AFD8ADB3}"的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOT

无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。

无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”.此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来自 HRESULT:0x80029C4A

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来 自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)) 经过多般折腾,还是没什么更好的办法.

System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。

报错:System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”.此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/D

关于java中任意对象强制转换为接口类型的问题

java中任意对象强转为接口类型都不会有编译错误 public class Apple implements Eatable{ public static void main(String args[]) { Drinkable drinkable = (Drinkable)new Apple(); } } interface Eatable{} interface Drinkable{} java中的类可以多实现接口,Java编译器无法判断该类是否实现了该接口所以不会有编译错误. 但是Java

无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]

c#解决方案EXCEL 导出 今天碰到客户的电脑在导出EXCEL的时候提示,无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 excel._application 的问题 最后用下面的方法解决,最主要的就是这句话: “C:\Program Files\Microsoft Office\OFFICE11\excel.exe” /regserver 客户电脑的故障是原先导出正常,后来突然不能导出了,事后估计是因为安装了WPS的原因,导致相应的组件冲突. 中间

System.InvalidCastException: 无法将类型为“DEduSys.SqlServerDal.sysManageUser”的对象强制转换为类型“DEduSys.IDal.IsysManageUser

出现 System.InvalidCastException: 无法将类型为“DEduSys.SqlServerDal.sysManageUser”的对象强制转换为类型“DEduSys.IDal.IsysManageUser”.这种类型错误,多数是数据层相关类没有实现相对应的接口.例如  public  class sysManageUser改为   public  class sysManageUser:IsysManageUser即可

无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”

今天开发C#项目时,有一个需要读取XML的功能点.编码过程中遇到了如标题所示的异常,如下图所示: 查询官网后得知XmlComment是注释节点的类型,如下图所示: 于是得出结论,使用XmlDocument去解析XML文件时,注释也会作为一个节点被加载到节点列表里.因此后续如果需要添加注释的话,可以考虑在节点里增加一个属性“comment”或者“text”专门用来存放注释信息,这样可以大大增加XML文件对于其他程序的可读性.如果说仅仅是自己使用的话,可以在程序里进行类型的判断.遍历XML节点时判断