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 的引用。
我在一个简单的主要 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 的引用。