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. Похоже, что этот стек вызовов - это просто какая-то чепуха.Что ж, попробуем раскрутить эту чушь.