2017-08-05 9 views
0

https://stackoverflow.com/a/21699086/592212からわずか1つのメインウィンドウテストアプリケーション(WPF WebBrowserコンポーネントのみ)で使用しています。次のように初期化コードは次のとおりです。IDocHostUIHandlerがエラー0xc0000409でMSHTML.dllをクラッシュする

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

+0

さて、低評価のソリューションは、より魅力的なものになるはずです:) –

+0

@HansPassantどのソリューションが正確に意味していますか? –

+0

鉱山、リンクされたQ + Aの底にあるもの。何十万人ものプログラマーが使用するコードは、常に不安定な問題が少ない。 –

答えて

0

あなたがからあなたの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への参照を追加するだけのものが必要な場合は、

+0

ありがとうございます。面白いのは、その例ではあなたのコードですが、私はそれがインターフェイスからそのメソッドを見逃してしまったのかどうか、全く考えていません。そうでなければ、それは同じで、残りのコードに合わせてコーディングスタイルだけが変更されます。それでも、これは私の元々の問題(それはもはやクラッシュしていません)への答えですが、それは私の問題を解決しません、高DPIのサポートは混乱し、適切なサイズでレンダリングしている間は、ですから、私はWin10の最後のIEバージョンでは、機能が残っているのに動作していますが、 'FEATURE_96DPI_PIXEL'に固執しなければなりません。 –

関連する問題