簡體   English   中英

WinRT庫在發布模式下不起作用

[英]WinRT library not working in Release mode

我一直在嘗試使用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 

注意:我已經更改了某些設置,例如
配置屬性-> C / C ++->將Windows運行時異常更改為是(/ ZW)
配置屬性-> C / C ++->代碼生成->啟用最小重建為NO(/ gm-)
配置屬性-> C / C ++->代碼生成->運行時庫到多線程DLL(/ MD)

被告知這些設置對於WinRT庫包含是必需的。 因此,基本上,對於發布模式,我必須以多線程(/ MT)格式運行代碼。 但是/ MT或/ Mtd與WinRT庫所必需的(/ ZW)方法不兼容。 請指導我的錯誤。

您收到有關缺少的NtProcessStartup符號的消息的事實表明,已使用鏈接器開關/ SUBSYSTEM:NATIVE 因為這是唯一需要NtProcessStartup函數而不是wmain / main的選項。 因此,您的發布模式選項已將您的應用程序標記為NATIVE(通常是設備驅動程序)應用程序。 (或者您專門添加了/ ENTRY:NtProcessStartup,但是對我來說似乎不太可能)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM