代码之家  ›  专栏  ›  技术社区  ›  Miro Hudak

IDocHostUIHandler正在崩溃MSHTML。dll,错误为0xc0000409

  •  0
  • Miro Hudak  · 技术社区  · 7 年前

    IDocHostUIHandler 从…起 https://stackoverflow.com/a/21699086/592212 在只有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 )在事件查看器中报告。

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Simon Mourier    7 年前

    我不知道你的WebBrowserHostUIHandler是从哪里来的。cs内容来自,但它是 错误的 .定义 IDocHostUIHandler TranslateAccelerator 方法

    我想这是因为我最初的代码使用System.Windows.Forms。消息类型是对System.Windows的引用。窗体(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的引用。表格(如需要)。