从 C++ 库调用方法时 WPF 中出现 StackOverFlowException

2024-03-29

我在 WPF 中使用 C++ 库。它是磁条读取器/写入器的 SDK。当我在 WPF 中调用它的方法之一时,10 秒后我收到 StackOverFlowException。从按钮单击事件调用的方法。

[DllImport("MSR_API.dll")]
static extern bool MSR_InitComm(string portname, UInt32 baud);

此方法连接到磁条读取器设备。首先,我在 Windows 窗体应用程序上测试了此方法,一切都很好。但是当我开始使用这个库编写 WPF 应用程序时,我每次都会收到 StackOverFlowException。这个“特征”的原因可能是什么?


[DllImport] 声明错误是一个常见原因。 CallingConvention 属性非常重要。出错会导致堆栈不平衡,如果您经常调用它,最终会导致 SO。有一个 MDA 可以解决这个问题,请确保您没有关闭 PinvokeStackImbalance。使用 Debug + Windows + Registers 是另一种诊断方法,调用前后 ESP 寄存器值必须相同。

C 或 C++ 代码通常需要 CallingConvention.Cdecl,除非该代码是使用 __stdcall 关键字显式编写的。


好的,Embarcadero 链接提出了例外的另一个原因。 Borland 库传统上启用 FPU 异常。这与 .NET 代码完全不兼容。尤其是 WPF,因为它大量使用双精度来控制控件的大小和位置。 FPU 堆栈溢出有点奇怪,您通常会遇到 NaN 值的问题。

如果您没有该库的源代码,那么您就没有很多有吸引力的选项来解决问题。您可以尝试的一件事是在第一次调用库后抛出并捕获异常。 .NET 异常处理管道会重置 FPU 控制字。像这样:

bool ok = MSR_InitComm("COM1", 9600);
try {
    throw new Exception("Fpu reset intended");
}
catch (Exception) {
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C++ 库调用方法时 WPF 中出现 StackOverFlowException 的相关文章

  • 如何在 Google 日历中创建“recurData”?

    我想使用 Google API 创建日历的重复事件 我正在关注链接 谷歌日历API http code google com apis calendar data 2 0 developers guide dotnet html Creat
  • 为什么我不能声明对可变对象的引用? (“引用不能声明为可变的”)

    假设我们有一个test cpp如下 class A class B private A mutable a 汇编 gt gcc test cpp test cpp 6 20 error reference a cannot be decla
  • 提升解析器中的 Spirit 段错误

    我一直在尝试将我在本科编译器中编写的一些 lex 和 yacc 代码转换为精神代码以学习精神 我发现了一个我似乎无法弄清楚的段错误 我这样写了词法分析器 namespace lex boost spirit lex enum Tokens
  • 访问二维数组的一行末尾之后的元素是否是 UB?

    以下程序的行为是否未定义 include
  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • 如何修改道路网络的 L 系统?

    向大家问好 我目前正在研究道路网络的程序生成 并偶然发现了 L 系统算法 根据我从有关该主题的各种科学论文以及有关该主题的论文的进一步论文中了解到 算法更改为使用 全局目标和局部约束 其中修改所采取的路径以适应地形等输入值和人口密度 现在我
  • 公开 ASP.NET 用户控件中的复杂属性

    我想从自定义 ASP NET 用户控件公开一个复杂的属性 可以通过aspx页面中的控制标签来设置 像这样的事情 public class TestData public int X public int Y public partial c
  • 阅读 C 语言中的科学记数法

    我正在尝试读取包含以下内容的文件 1 0000000e 01 2 9265380e 03 5 0821200e 02 4 3231640e 01 2 0000000e 01 1 0170240e 04 9 2798610e 02 4 072
  • 如果文本框不为空,如何添加并显示工具提示文本框 WPF

    需要显示提示 其中包含文本字段中的数据 文本框有数据时出现提示 只需使用绑定到 ToolTipService 附加属性即可 XAML
  • 使用 Xlib 捕获鼠标

    我想编写一个简单的 Xlib 程序来改变鼠标行为 举个例子 反转垂直移动 我在捕获事件时遇到问题 我想要代码 捕获控制器位置的变化 我向上移动鼠标 MotionEvent 计算新的光标位置 new x difference x 设置新的光标
  • 使用 Mono Cecil 添加 try-catch

    我正在使用 Mono Cecil 在另一个方法中注入代码 我想在我的代码周围添加一个 Try Catch 块 所以我写了一个带有 try catch 块的 HelloWorld exe 并反编译了它 Try Catch 的 Reflecto
  • 接收UDP数据包

    假设我的程序通过网络 UDP 发送 1000 字节 它是否保证接收方将 一批 接收 1000 个字节 或者他可能需要执行多次 读取 直到收到完整的消息 如果后者为真 我如何确保同一消息的数据包顺序不会 混淆 按顺序 或者协议可能保证这一点
  • C 错误:格式“%s”需要“char *”类型的参数,但参数 2 的类型为“char (*)[100]”

    过去几天我正在用 c 进行练习 并且收到此警告 如标题所示 我已经尝试了很多东西 但我真的不知道如何准确地解决这个问题 我不擅长编程 所以会有错误 以下是我正在使用的结构 无法更改 因为它们就是这样给出的 typedef struct bo
  • 如何从与桌面交互的应用程序与 Windows 服务进行通信?

    使用 Net 与服务交互的最佳方式是什么 即大多数托盘应用程序如何与其服务器通信 如果这个方法也是跨平台的 那就更好了 在 Mono 中工作 所以我猜远程处理已经过时了 Edit 忘了说了 我们仍然需要在现场支持 Windows 2000
  • 非数字输入导致死循环

    由于某种原因 如果用户输入了错误的数据类型 例如 j 或 循环将停止要求输入并继续显示 Enter an integer gt 一遍又一遍 如何让程序处理错误的输入 为什么输入非数字值会导致如此奇怪的行为 define SENTINEL 0
  • 将对象转换为泛型类型

    我已经有一段时间没有睡觉了 所以这可能比我想象的要容易 我有一个通用类或多或少是这样的 public class Reference
  • Plink 通过 C# 返回不需要的字符

    通过 C 使用 Plink 时 我在结果前后收到不需要的字符 Command ls l informatica tgtdynamicparams out grep vaulttest grep Sep 1 awk print 9 sort
  • MDI 窗体中的子窗口对接

    我有一个 MDI 表单和其中的一些子表单 我将子窗体停靠到 MDI 窗口的不同区域 但是当任何子窗体失去焦点时 其他停靠的窗体将重新排列 由于混乱 我准备了一组图像来展示该行为 Image1 单击任何窗口之前 Image2 点击窗口2后 问
  • 缓存行对齐(需要文章澄清)

    我最近在我的应用程序中遇到了我认为是错误共享的问题 我查了一下关于如何将我的数据与缓存行对齐 他建议使用以下 C 代码 C using C 0x alignment syntax template
  • Phong 着色问题

    我正在根据以下内容编写着色器冯模型 http en wikipedia org wiki Phong reflection model 我正在尝试实现这个方程 其中 n 是法线 l 是光线方向 v 是相机方向 r 是光反射 维基百科文章中更

随机推荐

  • 为什么我的代码没有返回任何内容

    目前对编程还很陌生 正在尝试学习Python 我有这段代码 但我不明白为什么我没有得到返回值 balance 3200 annualInterestRate 0 2 monthlyInterestRate annualInterestRat
  • 如何在perl中的本地范围内访问导入模块中的变量?

    我在创建 perl Moose 模块时陷入困境 我有一个全局 pm 模块 package XYZ require Exporter our ISA qw Exporter EDIT missed this line our EXPORT O
  • Django-MPTT,如何

    嘿 我刚刚安装了 django mptt 库 但我不知道如何让它工作 我已经添加了 from mptt models import MPTTModel class Category MPTTModel slug models SlugFie
  • 这些未定义的检查在行为上是否相同?

    我似乎有不同的方法 严格平等 检查undefined if something undefined if typeof something undefined if something void 0 可能还有其他人 In a 幸福的场景他们
  • Arduino:连接字符串时崩溃和错误

    我尝试将 AES 256 加密的输出连接到一个字符串 将此字符串与从 Android 手机发送的加密字符串进行比较 基本上 连接似乎有效 但在几次运行后会出现错误 不可读的字符 字符串变得更短而不是更长 或崩溃 它是可重现的 重启后在同一点
  • Youtube Iframe:未调用 onYouTubePlayerAPIReady()

    我有一个带有 iframe 的页面 它加载 youtube 视频 iframe 的 src 在运行时修改 我基于 Rob W 在该主题的不同答案中提供的代码 然后 当加载 iframe 时 执行以下代码 browser load funct
  • 每行的快速列洗牌 numpy

    我有一个包含行的长度超过 10 000 000 的大型数组 我需要单独洗牌这些行 例如 1 2 3 1 2 3 1 2 3 1 2 3 to 3 1 2 2 1 3 1 3 2 1 2 3 我目前正在使用 map numpy random
  • 在 UITextfield 中放置“清除按钮”

    有没有办法定位清除按钮 我想将其向下移动一点 使其与文本输入处于同一水平 有任何想法吗 我的文本字段已经是处理效果的另一个类的子类 包含 clearButtonRect 函数不起作用 IBDesignable open class Hosh
  • 有人可以解释一下这个 C# lambda 语法吗?

    我最近发现了一个静态方法 声明为 public class Foo public static Func
  • SQL Server 排序规则

    我正在读的书上说 SQL Server 支持两种字符数据类型 常规和 Unicode 常规数据类型包括 CHAR 和 VARCHAR Unicode 数据类型包括 NCHAR 和 NVARCHAR 不同之处在于 常规字符每个字符使用一个字节
  • Sinatra 是多线程的吗?

    Sinatra 是多线程的吗 我在其他地方读到 sinatra 默认情况下是多线程的 这意味着什么 考虑这个例子 get multithread do t1 Thread new puts sleeping for 10 sec sleep
  • 与没有 Ajax 或 jQuery on Rails 的情况类似/不同

    我正在尝试实现一个简单的类似 不同函数 我在这里看到的所有示例似乎都适用于 ajax 或 jquery 我还是一个初学者 我也不完全理解 我只想要一个简单的解决方案 我的想法是 我有书 我有用户 用户可以喜欢书籍 所以我通过 Like 模型
  • Rstudio 和闪亮服务器代理设置

    我已经在我的 ubuntu14 上安装了 RStudio Server v0 98 507 和 Shiny Server v1 1 0 10000 我的 rstudio 代理设置已打开nginx 默认值 location rstudio r
  • Excel UDF 加权 RANDBETWEEN()

    好吧 不是真的RANDBETWEEN 我正在尝试创建一个 UDF 来返回数组中数字的索引 其中数字越大 被选择的可能性就越大 我知道如何将概率分配给工作表中的随机数 即使用MATCH 关于概率的总和 有很多东西可以解释这一点 但我想要一个
  • 如何在 php 上执行 SoapClient

    我是soapclient的新手 我尝试在网上做一些研究 也尝试在soap上编码 但似乎这对我来说仍然不起作用 只是徘徊在这里的任何人都可以指出 也许给我一些例子 我如何实际使用的soapclint从以下Web服务器获取反馈 POST web
  • 如何列出指向 git 中特定提交的所有标签

    我已经看到命令了git describe and git name rev但我还没有设法让他们列出多个标签 示例 我有 sha1 48eb354 并且我知道标签 A 和 B 指向它 所以我想要一个 git 命令git something 4
  • 使用 Facebook Graph API 获取纽约市的餐厅列表

    我想使用 Facebook Graph API 获取位于纽约的所有餐厅页面的列表 我已经下载了 PHP SDK 但现在我遇到了这个问题 我只需要餐厅页面的 ID
  • 将自定义对象从客户端 (Jquery) 发送到服务器 (WCF)

    如何将自定义对象从客户端 jquery 发送到服务器 WCF 服务 传递对象的方式是什么 下面是我的代码 当我在萤火虫中看到时 这就是我得到的 请查看屏幕截图 http img88 imageshack us img88 205 54211
  • 自定义图标标记有时无法在 React-Native 中的 MapBox-GL 中工作

    我正在尝试编辑地图标记 如下图所示 这是我创建标记的代码 const MapBoxComponent gt const markers useState title hello coordinates 108 24065199465605
  • 从 C++ 库调用方法时 WPF 中出现 StackOverFlowException

    我在 WPF 中使用 C 库 它是磁条读取器 写入器的 SDK 当我在 WPF 中调用它的方法之一时 10 秒后我收到 StackOverFlowException 从按钮单击事件调用的方法 DllImport MSR API dll st