You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遵循微软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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:28:11