Это перевод
The case of the mysterious "out of bounds" error from CreateUri
and memmove
. Автор: Реймонд Чен.
Один клиент пытался понять, почему его программа вылетала с ошибкой
E_BOUNDS
("out of bounds"), возбуждаемой из вызова метода
CreateUri
:
combase!RoOriginateErrorW+0x50
wincorlib!Platform::Details::ReCreateFromException+0x40
contoso!`__abi_translateCurrentException'::`1'::catch$0+0x10
contoso!memmove+0x217f4
contoso!Windows::Foundation::IUriRuntimeClassFactory::CreateUri+0x44
contoso!Contoso::DashboardView::DashboardView_obj1_Bindings::Update_ViewModel_Layout_Groups+0x50
contoso!Contoso::DashboardView::DashboardView_obj1_Bindings::Update_ViewModel_Layout+0xe4
contoso!Contoso::DashboardView::DashboardView_obj1_Bindings::PropertyChanged+0x1134
contoso!XamlBindingInfo::XamlBindingTrackingBase::PropertyChanged+0x30
Судя по стеку, процедура копирования памяти
memmove
вызывала высокоуровневое исключение RTL C++/CX
E_BOUNDS
— что не имеет никакого смысла. Ещё более загадочно то, что
memmove
была вызвана из метода
CreateUri
интерфейса
IUriRuntimeClassFactory
, но код клиента
DashboardView
вообще не работает с URI. Похоже, что этот стек вызовов - это просто какая-то чепуха.
Что ж, попробуем раскрутить эту чушь.