Win32程序调用MddBootstrapInitialize2报错,求Windows App SDK磨砂玻璃解决方案
为给Win32窗口添加磨砂玻璃效果,我使用Windows App SDK开发,运行代码时出现初始化错误。
代码示例
#include <Windows.h> #include <MddBootstrap.h> #include <tchar.h> #include <winrt/Windows.System.h> #include <DispatcherQueue.h> #include <WindowsAppSDK-VersionInfo.h> LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR pszCmdLine, _In_ int iCmdShow) { HRESULT hr = CoInitialize(NULL); winrt::init_apartment(winrt::apartment_type::single_threaded); const PACKAGE_VERSION minVersion{}; hr = MddBootstrapInitialize2( Microsoft::WindowsAppSDK::Release::MajorMinor, Microsoft::WindowsAppSDK::Release::VersionTag, minVersion, MddBootstrapInitializeOptions_OnNoMatch_ShowUI ); return 0; }
错误信息
(caller: 00007FF88D149DC0) LogHr(1) tid(4784) 80040010 The object is not in any state of in situ activityMsg:[Bootstrap.Intitialize: Scanning packages for Major.Minor=1.0, Tag=, MinVersion=0.0.0.0] CallContext:[\Initialize]
WinRT originate error - 0x80670016 : 'Unable to resolve package dependency conditions. \u000d\u000a'。
已安装的NuGet包
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Microsoft.Windows.CppWinRT" version="2.0.240405.15" targetFramework="native" /> <package id="Microsoft.Windows.SDK.BuildTools" version="10.0.26100.1" targetFramework="native" /> <package id="Microsoft.WindowsAppSDK" version="1.5.240627000" targetFramework="native" /> </packages>
已尝试将majorMinorVersion修改为0x0001000,错误依旧。
解决方案
1. 匹配Windows App SDK运行时版本
你安装的是1.5版本的NuGet包,必须确保系统已安装对应版本的Windows App SDK运行时:
- 下载对应1.5版本的运行时安装包,执行完整安装(包含框架包和主运行时)。
2. 修正初始化版本参数
代码中Microsoft::WindowsAppSDK::Release::MajorMinor对应1.0版本,与NuGet包的1.5版本不匹配,导致扫描失败。可直接使用NuGet包提供的版本宏:
hr = MddBootstrapInitialize2( WINDOWSAPPSDK_RELEASE_MAJORMINOR, WINDOWSAPPSDK_RELEASE_VERSION_TAG_W, minVersion, MddBootstrapInitializeOptions_OnNoMatch_ShowUI );
或者手动指定1.5版本的MajorMinor值:0x00010005(计算方式:1<<16 | 5)。
3. 调整初始化顺序
winrt::init_apartment会自动处理COM初始化,移除手动调用的CoInitialize(NULL),避免冲突。
4. 检查项目配置
- 确保项目平台工具集为v143及以上,Windows目标版本不低于Windows 10 1809(10.0.17763.0)。
- 确认VC++目录中已正确引入NuGet包的包含目录和库目录。
- 链接器输入中添加
Microsoft.WindowsAppSDK.Bootstrap.lib。
5. 修复包依赖
- 卸载并重新安装所有相关NuGet包,清除项目的
packages缓存目录。 - 进入项目目录,执行
msbuild /t:Restore重新还原依赖。
内容的提问来源于stack exchange,提问作者feng lei

