无法将类型为“Shell32.ShellClass”的 COM 对象强制转换为接口类型“

刚开始搜索这个问题的时候大多都说是Interop.Shell32.dll这个库的版本问题,要换到1.2.才能正常使用,结果找一圈全是积分下载,一个库都稀罕:|

然后自己回过头尝试了一下,同样的方法在新建的vs2022版本demo以及vs2013demo都可以正常获取文件时长信息,那就不应该是版本的问题

 public static long GetMediaTime(string path)//Path为语音文件路径
  {

         //   string path = HttpContent.Current.Server.MapPath(voicePath);//将虚拟路径        转换为绝对路径,这里必须用绝对路径!

            string dirName = Path.GetDirectoryName(path);//获取文件夹名称

            string voiceName = Path.GetFileName(path);//获取文件名

            FileInfo file = new FileInfo(path);

            ShellClass sh = new ShellClass();

            Folder dir = sh.NameSpace(dirName);

            FolderItem item = dir.ParseName(voiceName);

            string songTime = dir.GetDetailsOf(item, 27);//win7参数为27

            string[] str = songTime.Split(':');
            if (str.Length > 2)
            {
                return (long)(Convert.ToInt32(str[0]) * 60 * 60 +             Convert.ToInt32(str[1]) * 60 + Convert.ToInt32(str[2])) * 1000;
            }
            else
            {
                return (long)(Convert.ToInt32(str[1]) * 60 + Convert.ToInt32(str[2])) * 1000;
            }
          //  return songTime;
        //原文:https://www.cnblogs.com/sunshineground/p/3637940.html

        }

在我纳闷为什么在自己项目跑不起来的时候,我突然注意到自己使用的时候是放到线程里面运行的,然后试了一下给其他demo套个线程,还真是报同样的错。

这下关键词变成了为什么com组件会在线程中报错

参考:解决C#调用COM组件异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)的错误 - 走看看

问题解决:)作个记录,留给可能需要的人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值