C#无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类相关的知识,希望对你有一定的参考价值。

如题、附图

求各位大神帮助

System.__ComObject的 COM 对象无法强制转换为接口类的原因是64位系统下,有些组件(微软的)只有32位版本,64位的应用程序调用不了32位的COM组件。

解决办法是:

    打开“解决方案”点击“开发项目的名称”。

    单击“属性”“生成”。

    点击“目标平台”,把“AnyCPU”改成“×86”。

    重新编译程序即可。

参考技术A 你查看是否添加对Excel组件的引用 还要你本机的Excel是否完全安装 (Office需安装.net编程选项)追问

添加了 Microsoft.Office.Interop.Excel.dll 和 office.dll
命名空间 using Microsoft.Office.Core; 你看下缺些什么

追答

那就是本机没有完全安装Excel组件 或者Excel未在本机注册

追问

安装了、2007 的。注册是什么意思呢?

追答

你添加的引用这样(注意对应的版本 比如我的是.net 2.0 添加对应的运行时版本):

如果还是不行

你把Office 2007 完全卸载后 重新完全安装Office 2007 (不要自定义安装) 试试 。以前我就是这样的解决的

追问

意思如果net 4.0的话就要引入4.0的吗?

追答

是滴

本回答被提问者采纳
参考技术B 你试试把~~~Microsoft.Office.Interop.Excel;的嵌入互操作类型改为false看看可以不追问

不行、报错 未能加载文件或程序集“office, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

追答

http://www.cnblogs.com/waitingfor/archive/2011/12/19/2293469.html你看看行不行。
缺少引用你先清理下然后重新生成。我一般是直接用ApplicationClass做操作,你dll版本有你也可以试试

参考技术C Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); 参考技术D Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();这样不行吗?

无法将“__NSDictionaryM”类型的值转换为“NSArray”[重复]

【中文标题】无法将“__NSDictionaryM”类型的值转换为“NSArray”[重复]【英文标题】:Could not cast value of type '__NSDictionaryM' to 'NSArray" [duplicate] 【发布时间】:2016-04-25 06:25:41 【问题描述】:

这是我的代码的一部分:

let quotesData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary


var quoteDictionary: [NSDictionary]!
quoteDictionary = quotesData["response"] as! [NSDictionary]

这是来自 Tumblr API 的 JSON 的一部分:


  "meta": 
  "status": 200,
  "msg": "OK"
,
  "response": 
  "blog": 
  "title": "A Sea of Quotes",
  "name": "aseaofquotes",
  "total_posts": 10089,
  "posts": 10089,
  "url": "http://www.aseaofquotes.com/",
  "updated": 1461556819,
  "description": "",
  "is_nsfw": false,
  "ask": true,
  "ask_page_title": "Thanks in advance if you leave a nice message and/or correct quote sources. Please check FAQs before sending. I do not respond to Anonymous questions, but I may answer your anon question in the FAQ. :) Warning: It may take me a while to reply.",
  "ask_anon": true,
  "submission_page_title": "Submit A Quote",
  "share_likes": false
,
"posts": [
  
    "blog_name": "aseaofquotes",
    "id": 143359277336,
    "post_url": "http://www.aseaofquotes.com/post/143359277336/marlon-james-a-brief-history-of-seven-killings",
    "slug": "marlon-james-a-brief-history-of-seven-killings",
    "type": "photo",
    "date": "2016-04-25 04:00:18 GMT",
    "timestamp": 1461556818,
    "state": "published",
    "format": "html",
    "reblog_key": "YiiqHC46",

等。

这是我的错误:

Could not cast value of type '__NSDictionaryM' (0x101925d38) to 'NSArray' (0x101925900).

在这一行:

quoteDictionary = quotesData["response"] as! [NSDictionary]

我不明白为什么。我对 JSON 和 iOS 很陌生,但“响应”对我来说就像一本字典,我不知道为什么它是一个 NSArray,我不知道如何解决这个问题。任何帮助将不胜感激。

这不是重复的,因为其他帖子没有帮助我解决这个问题。

【问题讨论】:

【参考方案1】:

错误信息说

无法将 actual 类型的 NSDictionary 转换为 expected 类型的 NSArray

[NSDictionary] 表示字典数组,但response 的值显然是字典,用一对大括号表示。

原来如此

let quoteDictionary = quotesData["response"] as! NSDictionary

但建议使用 Swift 原生集合类型

let quoteDictionary = quotesData["response"] as! Dictionary<String,AnyObject>

【讨论】:

【参考方案2】:
quoteDictionary = quotesData["response"] as! [NSArray]

现在从NSArray of dictionaries 取这个值作为[quoteDictionary][0] //返回第一个

现在以[quoteDictionary][0][blog] 访问该字典

【讨论】:

以上是关于C#无法将类型为"System.__ComObject"的 COM 对象强制转换为接口类的主要内容,如果未能解决你的问题,请参考以下文章

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

C# WPF 错误 无法将类型"System.Windows.Media.ImageSource"转换为"System.Drawing.Bitmap"

SQL Server Management Studio 无法将类型为“System.__ComObject

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

VS2015:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“IFabricTestManagementClient4”[重复]

无法将数据表转换为 C# 中的列表