来自非托管代码的 System.AccessViolationException?

2023-11-29

我正在编写这个库,它通过将由托管代码使用的媒体基础框架在 C++/CLI 中实现一些基本的音频播放器功能。我可以很好地播放音频、停止、暂停等。对于任何不熟悉 Media Foundation 的人,媒体会话都会发布您可以处理通知的事件。这是通过使用 IMFAsyncCallback 对象在会话对象上调用 BeginGetEvent 来完成的。 IMFAsyncCallback 定义了您应该实现来处理事件的方法 Invoke(IMFAsyncResult)。当事件发生时,工作线程上的会话对象将调用 invoke 方法,并使用可查询事件信息的 IMFAsyncResult 对象。该结果对象由事件线程创建并拥有。

在我的 Invoke 实现中,每当我尝试使用传递的 IMFAsyncResult 对象执行任何操作(包括仅调用 QueryInterface 或其他操作)时,都会收到 System.AccessViolationException。我实现 IMFAsyncCallback 的对象是分配在 CRT 堆上的基本 C++ 类(非托管),事件发布在同样分配在 CRT 堆上的会话对象拥有的线程上。

  1. 什么可能导致此异常?

  2. 为什么我会从用普通旧式 C++ 实现的代码中抛出 .NET 托管异常?当您使用混合模式装配时,是否会发生这种情况?


捕获故障转储,然后加载到VS 2010或WinDbg中进行分析,一切就都显现出来了。 VS 2010 会更容易,但 WinDbg 可能更有效。

由于使用 WinDbg 是更复杂的选项,我将对此进行详细说明(根据您的目标平台选择以下版本的 32 位或 64 位):

  • 下载并安装Windows 调试工具
  • 配置调试符号微软符号服务器

.sympath srv*<SymbolCacheDir>*http://msdl.microsoft.com/download/symbols

  • 将故障转储文件加载到 WinDbg 中(文件 -> 打开故障转储...)
  • 为模块配置调试符号

.sympath+ <PrivatePdbDir>

  • Load SOSWinDbg 的扩展

.loadby sos mscorwks; * fw 2-3.5

or

.loadby sos clr; * fw 4

  • 下载、解压和加载SOSEXWinDbg 的扩展

.load <Sosex32or64Dir>\sosex

  • 让 WinDbg 进行分析

!analyze -v

  • 使用SOSEX显示当前线程堆栈(包括托管帧和非托管帧)

!mk

这很可能会回答您的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自非托管代码的 System.AccessViolationException? 的相关文章

  • 如何将网络浏览器从 IE 更改为 Firefox

    我正在使用 System Windows Forms WebBrowser 开发 C NET 应用程序 IE 无法正常响应 所以我想更换为 Mozilla Firefox 我怎样才能做到这一点 你不能 The WebBrowser控件是 I
  • 立即检测客户端与服务器套接字的断开连接

    如何检测客户端已与服务器断开连接 我的代码中有以下代码AcceptCallBack method static Socket handler null public static void AcceptCallback IAsyncResu
  • 使用 system.reflection 列出类字段

    我需要获取一个列表来存储类中的所有字段 值 这个班级只是一些公共的const string我在下面粘贴的变量 public class HTDB Cols public class TblCustomers public const str
  • .NET ServiceModel.Syndicate - 更改 RSS 源的编码

    我正在尝试解决我在以下位置生成的所有 RSS 源的错误http captainobvio us http captainobvio us在 Internet Explorer 版本 8 和 9 中产生以下错误 进给代码错误 从当前切换 编码
  • 在 .NET 4 下运行的 .NET 2 和 .NET 4 程序集有什么区别

    我维护一个 NET 2 0 库 最近它的用户开始要求 NET 4 版本 我可以在 Visual Studio 中复制现有项目 设置Target Framework to NET Framework 4 0并完成它 但是在 NET 4 下运行
  • .NET Framework 中的语言互操作性(基本概念)是什么?

    我正在阅读 NET框架 https en wikipedia org wiki NET Framework维基百科的文章 第一段描述了这个框架的一般概念 它说 它包括一个大型库 并提供跨多种编程语言的语言互操作性 每种语言可以使用用其他语言
  • 从异步方法同步调用 CPU 密集型方法的混乱

    我正在尝试 NET 4 5 的 async await 结构 我正在开发 RESTful Web API 解决方案 我试图弄清楚如何处理 CPU 绑定操作 1 从当前线程同步调用它 或 2 使用Task Run 让我们使用这个例子page
  • 为什么“Assembly”和“Module”没有公开定义的构造函数?

    我正在用 C 构建一个 NET 程序集加载器 以进行 实验 了解有关 NET 内部操作的更多信息 我通过派生类型实现了反射 API 例如 运行时类型 类型 运行时字段信息 字段信息 运行时方法信息 方法信息 运行时参数信息 参数信息 运行时
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 从 RichTextBox 复制文本及其格式

    如何将 RichTextBox 中的文本及其格式复制到写字板或网络浏览器 就像复制纯文本一样 您可以使用Clipboard SetText method http msdn microsoft com en us library 6eahs
  • 如何使用 .NET 捕获我的桌面视频?

    我想知道是否有任何方法可以使用 NET 捕获我的桌面的视频 截屏视频 我并不是在寻找截屏软件 而只是在寻找一种可以让我自己生成桌面视频的技术 我想过拍摄多个屏幕截图 但我不确定如何以编程方式生成带有图像序列的视频 有人有主意吗 Thanks
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 如何在 Visual Studio 中调试时强制异常?

    我正在调试模式下运行我的应用程序 并且我想手动抛出异常 即不是从代码内部抛出异常 有什么办法可以做到这一点吗 当然 跑步throw new Exception My forced exception 在命令或立即窗口中不起作用 编辑 我希望
  • DateTime.Ticks 没有 100 ns 的分辨率? [复制]

    这个问题在这里已经有答案了 可能的重复 C DateTime Now 精度 https stackoverflow com questions 2143140 c sharp datetime now precision SO 有一些关于
  • 何时在 C++ 中使用 __declspec(dllexport)

    我正在制作这个 DLL 项目 并且不包含任何特定于编译器的宏 在我的 DLL 文件中导入方法后 导入器 exe 文件编译干净并且没有生成错误 他们从事不同的项目 但解决方案相同 我是否因为没有使用任何这些调用约定而把事情搞砸了 我的 DLL
  • 更改 NHibernate Session.Save 命令超时

    我们有几个长时间运行的后端进程 其运行时间超过默认的 30 秒 我们的NHibernate版本是2 0 1 4000 Spring NET是1 2 0 20313 NHibernate 通过 Spring NET 进行配置
  • 在不可变类型的构造函数中生成HashCode

    我对不可变类型的 HashCode 有一些疑问 我可以在构造函数中 预 生成不可变类型的 HashCode 还是有任何理由不这样做 当调用 GetHashCode 方法时 我是否应该再次生成哈希码 这是一个示例类 public class
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向

随机推荐

  • 计算html中两个输入类型=“日期”之间的天数[重复]

    这个问题在这里已经有答案了 我有这段 html 代码 其中有两个日期选择器 输入类型 date 和一个 id numdays 的文本字段 我想计算两个选定日期之间的天数并在文本字段中显示该数字 我还想限制选择早于今天的日期 我认为这可以通过
  • Scanner、nextInt 和 InputMismatchException

    我正在尝试读取一个文本文件 然后使用 Java 中的 nextInt 函数循环打印出整数 我的文本文件的形式为 a 2000 2 b 3000 1 c 4000 5 d 5000 6 这是我的代码 public static void ma
  • C++ 中的动态数组

    我是 C 和编程新手 如果您能在 C 或 C 中动态调整数组大小方面获得一些帮助 我将不胜感激 ex 我需要将值存储到数组中 值可能会改变 设置 1 0 1 2 3 设置 2 0 1 2 3 4 设置 3 0 1 设置 4 0 所以我希望他
  • 将 Moles 与 DateTime 结合使用

    我开始在单元测试中使用 Moles 并且在文档方面遇到了一些困难 我想摩尔 DateTime Now 如果您查看旧的执行此操作的方法是添加对 mscorlib 的引用 然后为其添加一个存根文件 添加新项 gt 用于测试的存根和摩尔 用于测试
  • 每 30 秒执行一次代码

    我有一个服务器需要从其客户端收集信息 该信息是一个随机数 我将其存储到频率数组中 服务器应该告诉所有客户端最频繁的号码 但每隔 30 秒左右一次 发送该号码的客户端会断开连接 并为新的客户端腾出空间 因此 新的数字被添加到数组中 如何让服务
  • 普通图像存储还是 mySQL blob?

    我正在编写一个 php mysql 网络应用程序 它有点像一个博客平台 人们可以在其中上传图片并发布它们 存储这些图像的最佳方式是什么 将它们存储在文件夹中还是通过 BLOB 存储在 mySQL 表中 我问这个是因为我想要最简单的方法 让我
  • 如何使用 AngularJS 重定向到另一个页面?

    我正在使用 ajax 调用来执行服务文件中的功能 如果响应成功 我想将页面重定向到另一个 url 目前 我正在通过纯 JS 代码执行此操作window location response message 但我需要用 AngularJS 代码
  • React Native 组件回调函数

    在组件中 我看到了执行回调的不同方式 有什么区别
  • Blazor 文本在插入后不会立即更改

    我有一个应用程序 用户可以在其中的某个位置插入文本 该文本显示在同一页面上的徽章上 我想要的是 当用户键入时 更改会立即显示在徽章中 我添加了一个 oninput 事件 但 oninput 事件似乎不会更新 razor 页面 因为当我有输入
  • 无法在关联方法上重复 NilClass

    我使用的是 Rails 2 3 5 和 ruby 1 8 7 我正在构建一个简单的 TODO 管理器 我有属于用户的任务 并且用户有许多任务 我在用着acts as taggable on steroids用于标记任务的插件和restful
  • 使用 ChartJS 堆叠浮动水平条

    我正在尝试实施堆叠水平浮动条 using ChartJS但我面临着一种不寻常的行为 有人可以帮忙为什么会发生这种情况吗 我正在使用的代码是
  • 忽略受密码保护的 Excel 文件[重复]

    这个问题在这里已经有答案了 我正在迭代一个充满 xlsx 文件的目录 我正在使用 VBA 打开它们并调整几列的大小 其中一些要求输入密码 我不知道 所以我只想跳过这些文件并转到下一个 在VBA中如何实现这一点 我尝试了以下方法 但没有这样的
  • 在 php facebook sdk 4.0.0 或更高版本中指定应用程序范围

    我正在使用 facebook 的新 php sdk gt 4 0 0 我试图找出在哪里指定scope我对图形 API 的请求 就像 我在哪里指定我想要publish actions这样用户就可以在登录时授权我这样做 In 这里的链接它说 您
  • 如何在 Unity 中序列化并保存游戏对象

    我有一个游戏 玩家拿起武器 然后将其作为 GameObject 变量放置给我的玩家 称为 MainHandWeapon 我试图通过场景更改来保存该武器 所以我试图保存它 我的处理方法如下 public class Player Manage
  • 使用 Requirejs 动态加载语言环境文件

    我有一个基于 RequireJS 构建的单页 Marionette 应用程序 需要支持翻译 我的目标是为每种语言提供一个字典文件 并根据登录用户的配置加载相关文件 由于大多数用户会使用英语 因此我想在构建过程中将英语词典捆绑到应用程序中 使
  • 使用查询字符串参数从 url 下载自定义设置

    我制作了一个 Windows 服务应用程序 我想创建一个安装文件 当用户通过我们的网站 URL 和查询参数请求应用程序时 例如 http test com setup exe id 1212 我需要将当前的 app config 键值更改为
  • 如何在自定义下拉功能区控件上设置所选项目

    我正在使用自定义 UI 编辑器为 Excel 创建一个自定义选项卡 其中有两个 DropDown 控件 我们将它们称为 DropDown1 和 DropDown2 我的目标是 每当我更改 DropDown1 选择时 它都会自动更改 Drop
  • 系统找不到启动 Ruby 和 Rails 命令提示符时指定的路径

    我一周前刚开始学习 Rails 直到今天一切正常 现在 当我启动 Ruby 命令提示符时 它会显示 The system cannot find the path specified Under Rails Environment Conf
  • 适用于所有浏览器的弹出框

    我目前正在使用 window open url blur window focus 但这只能在 Chrome 中正常工作 在 IE 中 窗口在加载完成后会重新出现 在 Firefox 中 窗口根本不会下降 别担心 这个弹出窗口不会令人厌烦
  • 来自非托管代码的 System.AccessViolationException?

    我正在编写这个库 它通过将由托管代码使用的媒体基础框架在 C CLI 中实现一些基本的音频播放器功能 我可以很好地播放音频 停止 暂停等 对于任何不熟悉 Media Foundation 的人 媒体会话都会发布您可以处理通知的事件 这是通过