遵循微软Win32自定义WinRT XAML控件教程后程序崩溃求助
Win32宿主自定义WinRT XAML控件启动崩溃问题
按照微软官方Win32宿主自定义WinRT XAML控件教程完成项目搭建后,程序启动直接崩溃,无窗口显示。使用Visual Studio 2022 v17.11.4版本,已反复核对教程步骤未发现遗漏,崩溃堆栈信息如下:
ucrtbased.dll!issue_debug_notification(const wchar_t * const message) Line 28 C++ ucrtbased.dll!__acrt_report_runtime_error(const wchar_t * message) Line 154 C++ ucrtbased.dll!abort() Line 61 C++ ucrtbased.dll!terminate() Line 59 C++ > MyDesktopWin32App.exe!__scrt_unhandled_exception_filter(_EXCEPTION_POINTERS * const pointers) Line 93 C++ KernelBase.dll!UnhandledExceptionFilter() Unknown ntdll.dll!RtlUserThreadStart$filt$0() Unknown ntdll.dll!__C_specific_handler() Unknown ntdll.dll!RtlpExecuteHandlerForException() Unknown ntdll.dll!RtlDispatchException() Unknown ntdll.dll!RtlRaiseException() Unknown KernelBase.dll!RaiseException() Unknown vcruntime140d.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 82 C++ MyDesktopWin32App.exe!winrt::throw_hresult(const winrt::hresult result) Line 5017 C++ MyDesktopWin32App.exe!winrt::check_hresult(const winrt::hresult result) Line 5087 C++ MyDesktopWin32App.exe!winrt::Windows::Foundation::IActivationFactory::ActivateInstance<winrt::MyUWPApp::MyUserControl>() Line 6582 C++ MyDesktopWin32App.exe!winrt::MyUWPApp::MyUserControl::{ctor}::__l1::<lambda_143_>::operator()(const winrt::Windows::Foundation::IActivationFactory & f) Line 62 C++ MyDesktopWin32App.exe!`winrt::MyUWPApp::MyUserControl::MyUserControl'::`1'::<lambda_143_>::<lambda_invoker_cdecl>(const winrt::Windows::Foundation::IActivationFactory & f) Line 62 C++ MyDesktopWin32App.exe!winrt::impl::factory_cache_entry<winrt::MyUWPApp::MyUserControl,winrt::Windows::Foundation::IActivationFactory>::call<winrt::MyUWPApp::MyUserControl (__cdecl*)(winrt::Windows::Foundation::IActivationFactory const &)>(winrt::MyUWPApp::MyUserControl(*)(const winrt::Windows::Foundation::IActivationFactory &) && callback) Line 6419 C++ MyDesktopWin32App.exe!winrt::impl::call_factory_cast<winrt::MyUWPApp::MyUserControl (__cdecl*)(winrt::Windows::Foundation::IActivationFactory const &),winrt::MyUWPApp::MyUserControl,winrt::Windows::Foundation::IActivationFactory,`winrt::MyUWPApp::MyUserControl::MyUserControl'::`1'::<lambda_143_>>(winrt::MyUWPApp::MyUserControl::{ctor}::__l1::<lambda_143_> && callback) Line 6458 C++ MyDesktopWin32App.exe!winrt::MyUWPApp::MyUserControl::MyUserControl() Line 62 C++ MyDesktopWin32App.exe!InitInstance(HINSTANCE__ * hInstance, int nCmdShow) Line 126 C++ MyDesktopWin32App.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpCmdLine, int nCmdShow) Line 44 C++ MyDesktopWin32App.exe!invoke_main() Line 123 C++ MyDesktopWin32App.exe!__scrt_common_main_seh() Line 288 C++ MyDesktopWin32App.exe!__scrt_common_main() Line 331 C++ MyDesktopWin32App.exe!wWinMainCRTStartup(void * __formal) Line 17 C++ kernel32.dll!BaseThreadInitThunk() Unknown ntdll.dll!RtlUserThreadStart() Unknown
可能的原因与解决方法
从堆栈看,崩溃发生在WinRT控件MyUserControl的实例化阶段,核心是激活工厂调用失败抛出未处理异常,以下是常见排查点:
WinRT组件未正确注册
调试模式下,WinRT组件需要自动注册才能被Win32进程调用。检查UWP组件项目的属性:- 确认
调试选项卡中注册输出设置为是 - 若手动部署,需执行
regsvr32注册组件,或在Win32项目启动前确保UWP组件已部署
- 确认
WinRT组件与Win32项目架构不匹配
确保UWP组件和Win32项目的目标架构一致(同为x86/x64/ARM64),混合架构会导致激活失败。缺少必要的WinRT初始化步骤
在Win32项目的wWinMain中,需先完成WinRT初始化:winrt::init_apartment();若遗漏此步骤,WinRT运行时环境未就绪,控件无法实例化。
XAML控件资源或依赖缺失
检查MyUserControl的XAML文件是否存在语法错误,或引用了未正确打包的资源(如图片、字体)。可尝试简化XAML内容,仅保留基础控件测试是否能正常启动。Visual Studio版本兼容性问题
部分Visual Studio更新可能导致WinRT组件编译或注册异常,尝试:- 清理解决方案并重新生成所有项目
- 更新Visual Studio到最新版本,或回退到教程推荐的版本
内容的提问来源于stack exchange,提问作者kkl
相关产品推荐
相关产品推荐

