在非托管回调的委托中抛出异常的含义

2023-12-30

在非托管回调期间使用的委托内部引发异常会产生哪些影响或不可察觉的后果?这是我的情况:

非托管 C:

int return_callback_val(int (*callback)(void))
{
  return callback();
}

托管 C#:

[DllImport("MyDll.dll")]
static extern int return_callback_val(IntPtr callback);

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate int CallbackDelegate();

int Callback()
{
  throw new Exception();
}

void Main()
{
  CallbackDelegate delegate = new CallbackDelegate(Callback);
  IntPtr callback = Marshal.GetFunctionPointerForDelegate(delegate);
  int returnedVal = return_callback_val(callback);
}

本机代码将轰炸未处理的异常,然后程序终止。

如果您确实想处理该异常,那么您需要使用自定义__try/__catch关键词 http://msdn.microsoft.com/en-us/library/windows/desktop/ms680144%28v=vs.85%29.aspx在本机代码中。这是毫无用处的,托管异常的所有详细信息都会丢失。唯一的区别特征是异常代码 0xe0434f4d。由于您无法确切知道出了什么问题,因此也无法可靠地恢复程序状态。最好不要抓住它。或者最好不要扔掉。

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

在非托管回调的委托中抛出异常的含义 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • Cookie 在 ASP.NET 中如何工作?

    我工作的网站由多个项目组成 用多种语言编写 现在 我们必须在查询字符串和会话变量中使用一些笨拙的代码 以使人们在从一个项目转到另一个项目时保持登录状态 由于 cookie 是特定于域的 因此我们尝试将它们转换为它们 因为它们可以使用一种语言
  • 如何根据区域设置获取带有时区的数据时间模式?

    以下代码是我已经拥有的代码 DateFormat f DateFormat getDateTimeInstance DateFormat SHORT DateFormat SHORT Java Locale SimpleDateFormat
  • 如何配置 nginx 与 Jetty6 网络服务器一起工作?

    看来nginx是和php ruby python一起使用的 有人有如何设置 nginx 与后端 jetty tomcat 一起使用的示例吗 Thanks 正确的 我想我有资格成为一名自学者 不是吗 只需在 nginx conf 文件的 ht
  • 在项目创建时自动加载库。安卓、日食

    我已经弄清楚如何在桌面上获得我想要的效果 窗口 gt 首选项 gt Java gt 安装的 JRE gt jre7 编辑 gt 添加外部 JAR 但我无法在 Android 上获得相同的效果 在桌面项目中 我可以看到文件夹 JRE Syst
  • 在 MongoEngine 中过滤嵌入列表

    如果我有这些模型 class Sub EmbeddedDocument name StringField class Main Document subs ListField EmbeddedDocumentField Sub 我想要一个返
  • 从地图中写入和读取时的竞争条件

    跟进旧帖子here https stackoverflow com questions 71562369 add unique values in an array as a value in concurrent map golang 我
  • C# 中如何检查字符串是否包含字符?

    是否有一个函数可以应用于字符串 如果字符串包含字符 该函数将返回 true 或 false 我有带有一个或多个字符选项的字符串 例如 var abc s var def aB var ghi Sj 例如 我想做的是有一个函数 如果上面包含小
  • 树/差异算法

    我目前正在编写一个差异算法来检测树的两个修订版之间的插入 删除 更新和移动 而每个节点都有一个唯一的 ID 该 ID 不会因修订而改变 我将按预序遍历每棵树 并动态生成两个节点之间的差异 然后移动cursors相应地 例如 在遇到删除的节点
  • 在 SPARQL 查询中使用条件

    我有一个 SPARQL 查询 如下所示 SELECT informationPath businessEntitylabel path sourced mastered delivered WHERE businessEntity dd h
  • 是否可以检查数学表达式字符串?

    我想检查所有括号的正确开始和结束 并检查它是否是给定字符串中的数学表达式 ex str1 A1 A2 A3 A5 B3 B5 C1 A3 C2 B2 C1 str2 A1 A2 A3 A5 C1 B3 B5 C1 A3 C2 B2 C1 s
  • SYSDATETIME() 的成本是否比 GETDATE() 的成本高?

    有什么理由让我每次都停止使用 SYSDATETIME 而不是 GETDATE 难道他们都没有询问CPU 现在是什么时间 或者 sysdatetime 是否需要更多指令来计算分数 Getdate 可以四舍五入吗 sysdatetime 可以更
  • 当字段名称与局部变量相同时如何访问字段?

    我有一个字段和一个同名的局部变量 如何访问该字段 Code String s Global private void mx String s Local lblB setText s i want global 在 C 中使用 运算符 如下
  • 获取嵌入的 YouTube 视频的标题和描述

    在我正在开发的网站上 我嵌入了来自 YouTube 的视频 并希望获取视频标题及其描述 我如何获取该信息 你可以这样做oembed http www oembed com 例子 http www youtube com oembed url
  • WooCommerce 中允许非结帐客人重定向

    After 仅允许访客在 WooCommerce 中结帐特定产品 https stackoverflow com questions 64322204 allow guest checkout for specific products o
  • 具有包含 的复杂类型的 XML 架构?

    我想定义一个复杂类型 其中包含可能存在或不存在的元素 并且还允许其他未定义的元素 所以我有这样的东西
  • 在 ggplot2 中的转换数据上标记重新缩放的值

    问题 当我尝试热图时 这是一个循环问题 其答案可能令人沮丧 我回答了一个问题使用不同的数据绘制热图 https stackoverflow com q 10859858 1290420使用fields and ggplot2包 它基本上允许
  • 从服务生成链接

    如何从服务生成链接 我已在我的服务中注入 路由器 但是生成的链接是 view 42代替 app dev php view 42 我该如何解决这个问题 我的代码是这样的 服务 yml services myservice class My M
  • 随机森林分类器的决策路径

    这是我在您的环境中运行它的代码 我正在使用RandomForestClassifier我正在尝试找出decision path对于选定的样本RandomForestClassifier import numpy as np import p
  • github-actions[bot] 权限被拒绝

    我正在使用 mkdocs 为我的项目生成文档 现在我无法将这些文档部署到 Github 页面 它告诉我 远程 github actions bot 对 XXX git 的权限被拒绝 致命 无法访问 XXX 请求的 URL 返回错误 403
  • 在非托管回调的委托中抛出异常的含义

    在非托管回调期间使用的委托内部引发异常会产生哪些影响或不可察觉的后果 这是我的情况 非托管 C int return callback val int callback void return callback 托管 C DllImport