gpt4 book ai didi

c# - 是否可以捕获或隐藏非托管异常窗口?

转载 作者:行者123 更新时间:2023-12-02 10:22:40 31 4
gpt4 key购买 nike

考虑遵循 native 代码(由于某些原因无法修改):

#include <cstdio>
#include <exception>

extern "C" {
__declspec(dllexport) void terminate_me(void) {
puts("hello from C");
std::terminate();
puts("bb from C");
}
}

从 C# 调用哪个(我们可以以任何我们想要的方式进行更改)

using System.Runtime.InteropServices;

class Program
{
[DllImport("Project1.dll")]
static extern void terminate_me();

static void Main(string[] args)
{
terminate_me();
}
}

这就是发生的事情:

enter image description here

我的问题是我们可以在不向用户显示此窗口的情况下使应用程序崩溃吗?我的意思是好的,非托管代码发生了一些不好的事情,只需关闭带有错误代码的应用程序,不要向用户显示任何内容。

可行吗?

最佳答案

使用 _CrtSetReportMode函数,像这样:

extern "C" {
__declspec(dllexport) void terminate_me(void) {
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); // define that anywhere in your init code, etc.
puts("hello from C");
std::terminate();
puts("bb from C");
}
}

注意 _DEBUG未定义(因此,在发布中),调用 _CrtSetReportMode在预处理过程中被删除。

您的 BadImageFormatException错误可能来自您在 Release模式下选中了 .NET 项目属性中的“首选 32 位”复选框。此错误始终是 x86-x64 不匹配问题。

关于c# - 是否可以捕获或隐藏非托管异常窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59448598/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com