【问题标题】:Need in understanding Exception at runtime in C++/CLI project execution需要了解 C++/CLI 项目执行中的运行时异常
【发布时间】:2018-04-06 07:59:28
【问题描述】:

我在这里使用Code,它是一个简单的代码,允许在带有 CLI 桥的 C++ 项目中使用托管 C# 类。我正在努力让它为我的测试工作。但我得到了这个例外:

在0x00007FFDAA264008(KernelBase.dll)在将Test.exe未处理异常:0xE0434352(参数:0xFFFFFFFF80131509,0x0000000000000000,0x0000000000000000,0x0000000000000000,0x00007FFD798F0000)。发生了

Test.exe 中的 0x00007FFDAA264008 (KernelBase.dll) 处引发异常:0xE0434352(参数:0xFFFFFFFF80131509、0x0000000000000000、0x0000000000000000、0x00000000000070000000000000000000000000000000000000000000000000000000000000000000000) 在 Test.exe 中的 0x00007FFDAA264008 (KernelBase.dll) 处引发异常:0xE0434352(参数:0xFFFFFFFF80131509、0x0000000000000000、0x0000000000000000、0x0000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000 00000 000000000千米)的异常。 在 Test.exe 中的 0x00007FFDAA264008 (KernelBase.dll) 处引发异常:0xE0434352(参数:0xFFFFFFFF80131509、0x0000000000000000、0x0000000000000000、0x0000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000 00000 000000000千米)的异常。 在 Test.exe 中的 0x00007FFDAA264008 (KernelBase.dll) 处引发异常:0xE0434352(参数:0xFFFFFFFF80131509、0x0000000000000000、0x0000000000000000、0x0000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000 00000 000000000千米)的异常。 在 Test.exe 中的 0x00007FFDAA264008 (KernelBase.dll) 处引发异常:0xE0434352(参数:0xFFFFFFFF80131509、0x0000000000000000、0x0000000000000000、0x0000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000 00000 000000000千米)的异常。 Test.exe:0xE0434352中0x00007FFDAA264008(Kernelbase.dll)的未处异常

我为 test.exe 尝试了依赖 walker,除了缺少一些 API-MS-WIN-CORE* dll 之外,我找不到任何实际问题。它确实说一个模块由于缺少导出功能而有一个未解决的导入,但是我在哪里可以找到这个呢?它还说检测到 1 个循环依赖项,但未找到一个。

见附图。

请指教。

【问题讨论】:

  • 您的代码中有错误。使用调试器并单步执行问题区域是正确的工具/方法。
  • 0xE0434352 是托管异常的异常代码,80131509 表示它是 InvalidOperationException。可能很简单,但是从本机代码中诊断此类异常确实非常困难。这确实需要您使用日志记录或使调用的代码能够生成合理的错误代码。通过调试此故障首先取得成功。项目>属性>调试>调试器类型=混合。并在使用 Debug > Windows > Exception Settings 引发异常时强制调试器停止,勾选 CLR 复选框。

标签: c# c++ interop managed


【解决方案1】:

看来我应该启用 CLR 异常以查看它无法从 .NET 端解析主机异常。发生这种情况是因为雅虎Has Yahoo suddenly today terminated its finance download API? 已停止提供此服务。

哇,如果没有所有有用的指示,我无法弄清楚这一点。谢谢大家,我将其标记为已解决。

【讨论】:

    【解决方案2】:

    您的程序似乎正在将 null 传递给位于内存位置 0xE0434352 的函数的参数 2、3、4。因此:

    0xE0434352 (parameters: 0xFFFFFFFF80131509, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FFD798F0000).
    

    我的猜测是函数 0xE0434352 在这些位置不期望空参数。我会仔细检查您对设置此 dll 的各种函数的所有剔除,以确保没有任何内容为空或未定义。

    【讨论】:

    • 0xE0434352 不是函数,它是异常的数字代码。因此,参数不是函数参数,而是任意“数据”(其含义取决于异常的“类型”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多