IDocHostUIHandler 崩溃 MSHTML.dll,出现错误 0xc0000409

IDocHostUIHandler crashing MSHTML.dll with error 0xc0000409

我在一个简单的主要 window 测试应用程序中使用 稍作修改的 IDocHostUIHandler,该 Window 中只有 WPF WebBrowser 组件。初始化代码如下:

    public MainWindow()
    {
        InitializeComponent();

        _wbHostHandler = new WebBrowserHostUIHandler(PART_WebBrowser);
        _wbHostHandler.Flags |= HostUIFlags.DpiAware;

        PART_WebBrowser.Navigate("SOME_URL");
    }

应用程序中确实没有其他任何事情发生。尽管如此,在 运行 应用程序之后,COM 组件中会抛出一个错误(因此,我无法使用调试器来捕获它)并且在事件查看器中报告 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)。

关于导致错误的原因或如何消除它的任何想法?

(Win10 专业版 1703(内部版本 15063.483)和 .NET 4.6.2)

源代码:https://www.dropbox.com/s/ddob6p7jh4dfsda/UIHostCrashDemo.zip?dl=1

我不知道你的 WebBrowserHostUIHandler.cs 内容是从哪里来的,但 错了 IDocHostUIHandler 的定义只是遗漏了 TranslateAccelerator 方法。

我想这是因为我的初始代码使用了 System.Windows.Forms.Message 类型,它是对 System.Windows.Forms (winforms) 程序集的引用。如果这是一个问题,如果不使用消息(我的初始代码就是这种情况),则可以将方法替换为此方法。

所以在界面中你必须添加这个,就在ResizeBorder:

之后
[PreserveSig]
uint TranslateAccelerator(IntPtr msg, ref Guid group, int nCmdID);

并且您必须在代码的任何位置实现它,如下所示:

uint Native.IDocHostUIHandler.TranslateAccelerator(IntPtr msg, ref Guid group, int nCmdID)
{
    return S_FALSE;
}

但同样,这是可选的,如果你想要一些可以正常工作的东西 copy/paste 我的代码来自我的 post 并在需要时添加对 System.Windows.Forms 的引用。