WinRT库无法在发布模式下

时间:2016-06-02 06:25:44

标签: c++ windows-8 windows-runtime release

我一直在尝试使用Visual Studio 2012中的WinRT库构建桌面应用程序。 代码段如下。

[STAThread] 
int   wmain (Platform :: Array <String ^> ^ args) 
{ 
    wcout << L"Copyright (c) Microsoft Corporation. All rights reserved." << endl; 
wcout << L"FindPackages sample" << endl << endl; 
 try 
{ 
    auto packageManager = ref new Windows::Management::Deployment::PackageManager(); 
    auto packages = packageManager->FindPackages();

    int packageCount = 0; 
    std::for_each(Windows::Foundation::Collections::begin(packages), Windows::Foundation::Collections::end(packages), 
        [&packageManager, &packageCount](Windows::ApplicationModel::Package^ package)  
    {  
        DisplayPackageInfo(package); 
        DisplayPackageUsers(packageManager, package); 
        wcout << endl; 
        packageCount += 1;  
    }); 
} 
catch (AccessDeniedException^) 
{ 
    wcout << L"FindPackagesSample failed because access was denied. This program must be run from an elevated command prompt." << endl; 
    return 1; 
} 
catch (Exception^ ex) 
{ 
    wcout << L"FindPackagesSample failed, error message: " << ex->ToString()->Data() << endl; 
    return 1; 
} 
getchar();
return 0; 

}

这用于列出metro应用程序详细信息。此代码在DEBUG模式下工作正常。但当我将其更改为发布模式时,我收到一个错误:

error LNK2001: unresolved external symbol _NtProcessStartup 

注意: 我已经更改了某些设置,例如
配置属性 - &gt; C / C ++ - &GT;将Windows运行时异常设置为是(/ ZW)
配置属性 - &gt; C / C ++ - &GT;代码生成 - &gt;启用最小重建为NO(/ gm-)
配置属性 - &gt; C / C ++ - &GT;代码生成 - &gt;运行时LIbrary到多线程DLL(/ MD)

有人告诉我们,这些设置对于包含WinRT库是必需的。 所以基本上,我必须以发送模式的Multi_Threaded(/ MT)格式运行我的代码。但/ MT或/ Mtd与WinRT库所必需的(/ ZW)方法不兼容。 请指导我的错误。

1 个答案:

答案 0 :(得分:0)

您收到有关缺少NtProcessStartup符号的消息这一事实意味着使用了链接器开关/SUBSYSTEM:NATIVE。因为这是唯一需要NtProcessStartup函数而不是wmain / main的选项。因此,您的发布模式选项以某种方式将您的应用程序标记为NATIVE(通常是设备驱动程序)应用程序。 (或者你特意添加了一个/ ENTRY:NtProcessStartup,但这对我来说似乎不太可能)。