10

私は Windows ストア アプリに取り組んでいますが、実際には何の情報も得られない WinRT エラーが発生するので、これらの種類のエラーを理解する方法を知りたいです。

基本的に、OnPointerPressed 内で呼び出される次の行でエラーが発生します。

m_gestureRecognizer->ProcessDownEvent(args->GetCurrentPoint(nullptr));

エラーは次のとおりです。

DXAML2.exe の 0x76F54B32 (KernelBase.dll) での初回例外: 0x40080201: WinRT 発生エラー (パラメーター: 0x80070057、0x00000044、0x03CEE72C)。

このエラーは以前は表示されませんでしたが、変更したのは、現在のポインターの PointerId が == を使用して保存したものと同じかどうかをテストする if 句でこの行がラップされていることだけです。

if(args->GetCurrentPoint(nullptr)->PointerId == m_UIPointerID)

なぜこれが起こり始めたのか、私にはわかりません。

だから私の質問は2つの部分に分かれています:

  1. より一般的には、上記のようなエラーが何を意味するのかを理解するにはどうすればよいですか?
  2. そして、私がpointerIdをチェックした今、このエラーが突然発生し始めたことを誰かが知っていますか?

御時間ありがとうございます。

PS 変更されたもう 1 つの点は、画面上に既に 2 つのポインター (この GestureRecognizer にプッシュされるポインター) と別のポインターが存在することです。したがって、PointerId チェックが行われます。

4

2 に答える 2

16

「そのようなエラーを解読する方法」...

WinRT に起因するエラーの場合、パラメーター リストの 3 番目のアドレス (この例では 0x03CEE72C) を取得し、メモリ ウィンドウでエラーの説明を見つけることができます。

デバッグ中に、エラーがスローされたときにブレークし、[デバッグ] -> [ウィンドウ] -> [メモリ] -> [メモリ 1] でメモリ ウィンドウを開きます。

アドレスをコピーして貼り付けて、「見つけやすい」エラー メッセージを取得します。

于 2014-04-01T21:41:32.970 に答える
2

Raman が言ったように、表示されている 16 進値を調べるとよいでしょう。最初のものは、シンボル/ソースなしではあまりわからないメモリの場所です。この場合、Windows によって直接報告されます。おそらく、パブリック シンボルは、エラーの原因をさらに明らかにすることができますが、エラー コードの検索はより役に立ちます。

0x80070057をBing すると、一般的な HRESULT 値に関する MSDN の記事が表示されます。

E_INVALIDARG: 1 つ以上の引数が無効です: 0x80070057

もちろん、すべての詳細を提供するわけではないので、理論化する必要があります。おそらく、一度しか呼び出すことができずargs->GetCurrentPoint(nullptr)、値を保存/再利用する必要がありますか? ジェスチャ認識機能が正しく構成されていない可能性がありますか? 例外がスローされた時点でアプリ ウィンドウが表示されていないか、スレッドが間違っている可能性があります。"if"これらのステートメントでそれらを除外したため、ジェスチャ認識エンジンへの予期された呼び出しが見逃された可能性があります。

于 2014-01-18T05:30:37.553 に答える