WinRT - Windows Store - WinRT Originate错误 - 如何解密这样的错误?

pon*_*cho 10 error-handling visual-c++ windows-runtime winrt-xaml windows-store-apps

我正在开发一个Windows应用商店应用,我收到的WinRT错误并没有真正给我任何信息,所以我想知道如何理解这些错误.

基本上我在OnPointerPressed内部调用以下行得到错误:

m_gestureRecognizer->ProcessDownEvent(args->GetCurrentPoint(nullptr));
Run Code Online (Sandbox Code Playgroud)

错误是:

DXAML2.exe中0x76F54B32(KernelBase.dll)的第一次机会异常:0x40080201:WinRT发起错误(参数:0x80070057,0x00000044,0x03CEE72C).

这个错误不常出现,我唯一改变的是这行现在包装在一个if子句中,该子句测试当前指针的PointerId是否与我刚刚使用==存储的指针相同,例如:

if(args->GetCurrentPoint(nullptr)->PointerId == m_UIPointerID)
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样.

所以我的问题分为两部分:

  1. 更一般地说,我如何理解上述错误是什么意思?
  2. 有没有人知道这个错误突然开始发生,因为我检查了pointerId?

谢谢你的时间.

PS我想另一件事情已经改变了,屏幕上已经有2个指针(被推入这个GestureRecognizer的指针)以及另一个指针,因此PointerId检查.

ste*_*veb 13

"如何解读这样的错误"......

对于任何WinRT originate错误,您可以获取参数列表中的第三个地址(在您的示例中为0x03CEE72C),并在内存窗口中查找错误的描述.

在调试时,在抛出错误时中断并通过Debug - > Windows - > Memory - > Memory 1打开内存窗口

复制并粘贴地址以获取"易于查找"的错误消息.


Fil*_*kun 2

正如拉曼所说 - 最好查找显示的十六进制值。第一个是内存位置,如果没有符号/源,它不会告诉您太多信息,在本例中是由 Windows 直接报告的。也许公共符号可以更多地揭示错误的来源,但错误代码查找更有帮助。

如果您Bing 搜索 0x80070057,您将找到一篇关于常见 HRESULT 值的 MSDN 文章的 MSDN 文章,其中列出了

E_INVALIDARG:一个或多个参数无效:0x80070057

当然,它不会向您提供所有细节,因此您需要进行理论分析。也许您只能调用args->GetCurrentPoint(nullptr)一次,并且应该存储/重用该值?也许手势识别器配置不正确?也许应用程序窗口在抛出异常或线程错误时不可见。也许由于用这些语句过滤掉了一些对手势识别器的预期调用,所以错过了这些调用"if"