IDocHostUIHandler崩溃MSHTML.dll错误0xc0000409

我使用简单的一个主窗口testing应用程序从https://stackoverflow.com/a/21699086/592212略有修改的IDocHostUIHandler只在该窗口中的WPF WebBrowser组件。 初始化代码如下:

  public MainWindow() { InitializeComponent(); _wbHostHandler = new WebBrowserHostUIHandler(PART_WebBrowser); _wbHostHandler.Flags |= HostUIFlags.DpiAware; PART_WebBrowser.Navigate("SOME_URL"); } 

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

什么是造成错误或如何摆脱它的任何想法?

(Win10 Pro 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; } 

但是,这是可选的,如果你想要的东西只是从我的帖子仔细复制/粘贴我的代码,并添加一个引用System.Windows.Forms如果需要的话。