我使用简单的一个主窗口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如果需要的话。