System.Runtime.InteropServices.GetHRForException的陷阱

C#在调用office的PowerPoint时出现 对 COM 组件的调用返回了错误 HRESULT E_FAIL。解决办法。 测试代码时,出现未处理 System.Runtime.InteropServices.COMException   Message="对 COM 组件的调用返回了错误 HRESULT E_FAIL。"   Source="Microsoft.Office.Interop.PowerPoint"   ErrorCode=-2147467259   StackTrace:       在 Microsoft.Office.Interop.PowerPoint.Presentations.Open(String 阅读详情

从字面上看,GetHRForException函数的作用很简单:得到Exception所对应的HRESULT的值。但是,GetHRForException还会做一件事情:设置当前线程的IErrorInfo使之指向该Exception(严格来说是获得Exception的CCW中的IErrorInfo接口指针)。如果对IErrorInfo不熟悉的朋友们可以把IErrorInfo看成COM版本的GetLastError或者errno。设置IErrorInfo会导致之后的代码如果使用GetErrorInfo查询IErrorInfo的值,会获得一个非0的结果,那么有些代码可能会认为程序出错而拒绝继续执行。更糟糕的是,如果之后的代码在做COM Interop或者PInvoke,CLR会检查IErrorInfo,如果IErrorInfo非0则认为该调用失败,并抛出异常或者返回错误值(视乎PreserveSigAttribute是否存在)。直接的结果是可能函数调用成功,但是因为IErrorInfo已经被设置而导致该调用最终失败。很有意思的是在.NET中有一段处理资源的代码正好有这个问题,结果间接导致了巴西葡萄牙语版本(是的,你没看错J)的.NET的RegAsm挂掉。其实我个人认为这个函数应该被命名为GetHRForExceptionAndSetIErrorInfo(Exception ex);虽然有些长,但是很清晰,总比简短而错误的名字要来的好。

在正常情况下,如果你需要获得Exception的HRESULT值,应该直接使用Exception.HResult属性。那么什么时候才应该使用GetHRForException呢?当你写了一个.NET的函数准备让非托管代码调用(最好是通过COM),并且返回一个HRESULT,这个时候你有必要把托管函数内部抛出的异常转换为HR,并且把Exception本身的信息设置到当前线程的IErrorInfo中去,这才是最符合COM规范的。

.NET Framework 1.0到4.0底层演进:CLR、泛型、LINQ与并发模型的技术脉络 .NET Framework 是微软构建的统一托管运行时平台,其核心在于公共语言运行时(CLR)对内存管理、线程调度与类型系统的深度控制。从1.0初代寄生式设计,到2.0引入分代垃圾回收与泛型支持,再到3.5依托表达式树实现LINQ声明式查询,最终在4.0完成IOCP线程池与Task并行库的工程落地——这一演进本质是运行时能力持续解耦、强化与标准化的过程。它奠定了现代.NET跨平台、高性能与安全隔离的技术根基,广泛应用于企业级Web服务、桌面应用及混合部署系统。理解CLR版本差异、泛型JIT特化机制与LIN 阅读详情

相关推荐

【新华三】DHCP+TFTP+ZTP自动开局实战

设备运行ZTP功能,可以自动获取并自动加载开局文件,实现设备的免现场配置和部署,从而降低人力成本,提升部署效率。使用TFTP服务器工具进行文件的上传和下载,网上很多TFTP server软件,大家可以自行下载。3CDaemon等,可以根据使用自取所需。大家应该都了解ZTP,但是目前发现除了控制器之外仅使用ZTP开局的兄弟并不是很多,因此分享此过程方便大家批量开局,留出更多时间学习更多技术。电脑打开DHCP服务器,TFTP服务器,并通过网线连接到设备的管理口,若设备较多可以通过带外交换机等进行连接,

五大连池的镜子 4978

System.Runtime.InteropServices.COMException:“对 COM 组件的调用返回了错误 HRESULT E_FAIL

问题:使用Microsoft.Office.Interop.Word进行word的开发过程中出现的错误:System.Runtime.InteropServices.COMException:“对 COM 组件的调用返回了错误 HRESULT E_FAIL。 场景:在对Word中的表格进行单元格合并操作后报错。 原因:使用语句oTable.Cell(1, 1).Merge(oTable.Cel...

daze_scarecrow的博客 9624

《机器学习》周志华_自学记录

第一章绪论## 1.1引言机器学习所研究的主要内容,是关于在计算机上从数据中产生"模型"(model)的算法,即"学习算法"(learning algorithm).在面对新的情况时(例如看到一个没剖开的西瓜),模型会给我们提供相应的判断(例如好瓜).如果说计算机科学是研究关于"算法"的学问,那么类似的,可以说机器学习是研究关于"学习算法"的学问.## 1.2基本术语:用于预测离散值,例如将样本分为“好瓜”或“坏瓜”。:用于预测连续值,例如西瓜的成熟度(如0.95、0.37)。

2201_75296678的博客 2530

System.Runtime.InteropService.SEHException外部组件发生异常

这几天一直被这个错误笼罩,在网上查了很多资料,都和我的程序不大相关,昨天在测试的时候无意间发现如果我不打印票据,也就是不设置虚拟打印机,就不会出现这个错误,然后继续测试,最后问题的原因的就是那天验收未通过后我设置了虚拟打印机的缘故,仔细想想也对,我是调用外部社保dll的,这个对.net来说是属于非托管的,而且这个dll是通过com口来和读卡器交互的,所以虚拟打印机可能会占据这个通道后不会马上释放,...

weixin_30646315的博客 5132

Bochs源码分析 - 26:8259中断控制器介绍

前言 现在我们跟着《x86/x64体系探索及编程》来分析17章内容 -- 8259中断控制器。这个是涉及硬件的,很遗憾,除了大学期间使用STM32搞过一个计算器,其余就没多少硬件编程经验,我在淘宝上找了下大概是这个东东。 https://pdos.csail.mit.edu/6.828/2010/readings/hardware/8259A.pdf 上面是8259A的芯片手册,里面讲的还是挺详细的,虽然里面很多东西还是看不太懂,但是结合着《x86/...

WriteAnything_的博客 967

Educoder:爬虫实战——求是网周刊文章爬取

第1关:获取新闻url importrequests importre defgeturls(): #**********Begin**********# url='http://www.qstheory.cn/dukan/qs/2014/2019-01/01/c_1123924172.htm' headers={ 'User-Agent':'Mozilla/5.0(Linux;Android6.0;Nexus5Buil...

weixin_46026136的博客 5253

解决System.Runtime.Interopservices.COMException问题

     以前用的是Windows XP的操作系统,创建了一个ASP.NET项目,运行的好好的。这段时间换了Windows Server 2008操作系统,再用VS打开该项目时,发现项目无法打开,并出现了以下错误提示:System.Runtime.Interopservices.COMException。     查阅一些资料后,发现是由于IIS服务器的问题造成的,Windows XP系统是I

holyrong的专栏 6万+

dToF直方图之美_deadtime死区时间

IMX459的死区时间可以在6ns,这个时间是什么级别,车载激光雷达激光器的光脉宽一般都在4ns以上,也就是这个时间贴近去SPAD的死区时间,这就导致了pile up会非常弱,不会有太多数量的光子计数堆积,加上某些SPAD设计,对TDC有一些更深入的考量,所以不需要去校正pile up算法。Sensor层面决定了pile up的复杂程度,如果一个dToF的SPAD一致性非常好,那么pile up校正可以简单到极致,也就是一句代码的事,比如IMX611,优秀到不需要后端去考虑校正pile up。

dream it possible 1433

关于System.Runtime.InteropServices.COMException (0x80070006): 句柄无效的问题

今天发生一个意外情况。情况是这样的:     本地开发环境下,运行网站,在某个画面里进行数据检索,刚开始没有问题,在测试分页按钮“末页”时,出现状况,无法检索数据,并且之后查看其他页面时,只要与数据库有关的操作,都无法正常操作。 ,     之后查看了日志,显示以下的错误信息:    System.Runtime.InteropServices.COMException (0x80

conanhhy的专栏 1万+

windows中搭建sonic云真机环境/云真机环境搭建-基于docker容器部署

基于Windows系统搭建Sonic远程云真机环境实现通过浏览器操作手机端系统

雾林小妖的博客 1015

文末含资料链接和视频讲解!YOLOv8+RepVGG+QueryDet小目标检测终极指南:从理论到实战,突破遥感图像检测难题

QueryDet(Query Detection)机制代表了目标检测领域的一个重要范式转变。传统的目标检测方法基于anchor或anchor-free的密集预测,需要为图像中的每个可能位置生成预测。而QueryDet采用了稀疏查询的方式,通过少量的可学习查询向量来直接预测目标。 这种设计灵感来源于Transformer架构中的注意力机制。在自然语言处理中,Transformer通过query-key-value机制实现了高效的序列建模。QueryDet将这一思想引入到目标检测中,将检测问题转化为查询匹配问

FJN110的博客 384

关于异常的疑难解答:System.Runtime.InteropServices.COMException

当 COM 方法调用返回一个无法识别的 HRESULT 时,将引发 COMException 异常。 相关提示 检查该异常的 ErrorCode 属性,以确定 COM 对象返回的 HRESULT 当运行时遇到不熟悉的 HRESULT 时,会引发 COMException 异常,该异常包含一个公共的 ErrorC...

weixin_33843947的博客 2961

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3403

System.Runtime.InteropServices.COMException (0x80010105): 服务器出现意外情况 问题的解决

System.Runtime.InteropServices.COMException (0x80010105): 服务器出现意外情况。 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))         出现此问题是C#调用Microsoft.Office.Interop.Excel 导出excel时提示此错误。         但是在安装36

missionforyou的专栏 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

System.Runtime.InteropServices.COMException (0x8004E00F): COM+ 无法与 Microsoft 分布式事务协调程序交谈 (异常来自 HRESU

错误信息: System.Runtime.InteropServices.COMException (0x8004E00F): COM+ 无法与 Microsoft 分布式事务协调程序交谈 (异常来自 HRESULT:0x8004E00F) 解决方案: 1、删除注册表中的键:      HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services

勿忘初心 4493

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

System.Runtime.InteropServices.COMException:“服务器出现意外情况。 (异常来自

System.Runtime.InteropServices.COMException:“服务器出现意外情况。 (异常来自

10年职场两茫茫,35岁凄凉奈若何 780

System.Runtime.InteropServices.COMException: 检索 COM 类工厂中 CLSID 为 {99AEA70E-4D13-44BF-A878-33345CBFCB...

这个错误通常表明您正在尝试使用的组件或类型在系统中没有注册。 可能是因为它尚未安装,或者因为由于某种原因无法加载。 请检查您的系统上是否存在该组件或类型,并确保已正确安装并加载到系统中。 ...

weixin_35755562的博客 954

vs 程序运行时跳出 An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in 。。 错误

     运行控制台程序时 跳出如下错误      An unhandled exception of type System.Runtime.InteropServices.SEHExceptionoccurred in 。。  Additional information: External component has thrown an exception.  

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 1万+

system.runtime.interopservices.sehexception external component has thrown an exception

system.runtime.interopservices.SEHexception :external component has thrown an exception

Zero++ 7630
上一篇: Vista上远程管理Hyper-V服务器
下一篇: 预告:公共语言运行库(CLR)开发系列课程(4):COM Interop进阶
ATField
博客等级 码龄25年 673粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值