C++ C++/WinRT控制台:初始化BackgroundDownloader会使程序崩溃

C++ C++/WinRT控制台:初始化BackgroundDownloader会使程序崩溃,c++,windows-runtime,c++-winrt,C++,Windows Runtime,C++ Winrt,我最近开始玩C++/WinRT() 我的目标是创建一个下载文件并将其保存到下载文件夹的应用程序。我决定使用BackgroundDownloader类() 但是,当我尝试创建BackgroundDownloader实例时,我的程序崩溃,出现以下异常: MyApp.exe 0x767 29 ab2抛出异常:微软C++异常:WRRT::HRESTUTHORY错误在内存位置0x00 4FEF4.. < /P> int main() { // The line bellow causes the

我最近开始玩C++/WinRT()

我的目标是创建一个下载文件并将其保存到下载文件夹的应用程序。我决定使用BackgroundDownloader类()

但是,当我尝试创建
BackgroundDownloader
实例时,我的程序崩溃,出现以下异常: <代码> MyApp.exe 0x767 29 ab2抛出异常:微软C++异常:WRRT::HRESTUTHORY错误在内存位置0x00 4FEF4..<代码> < /P>

int main()
{
   // The line bellow causes the crash:
   winrt::Windows::Networking::BackgroundTransfer::BackgroundDownloader backgroundDownloader;
}


我做错了什么?

WinRT是一组COM接口,因此您需要首先初始化子系统。 必须首先像这样初始化WinRT单元

winrt::init_apartment();


对于UI应用程序

来自:“使用
Windows.Networking.BackgroundTransfer
通过toast通知进行通信的应用程序必须在应用程序清单文件中声明它能够toast。”-您是否遵守合同?C++/WinRT抛出
WinRT::hresult\u错误
可以捕获I bet错误的错误。code().value等于0x8007109A(错误\u非\u APPCONTAINER),因为您的环境不正确(您必须使用打包)。@IInspectable,我的应用程序不“通过toast通知进行通信”,甚至没有应用程序清单文件(它不是UWP/打包的应用程序)。如果您使用的是控制台项目或其他桌面项目,您不能使用API,因为API的属性没有列出表示桌面应用程序支持该类型的类。@SimonMourier不再需要它。WinRT可以与Win32应用程序一起使用您尝试过您的建议吗?这不会改变任何事情。仔细阅读评论我刚刚测试了你的解决方案。遗憾的是,上面提到的两个选项都不起作用。我没有使用BackgroundDownloader,但是调用WinRT API需要init_partment()调用。这就是我使用WinRT的方式
winrt::init_apartment(apartment_type::single_threaded);