2016-06-02 23 views
0

Ich habe versucht, eine Desktop-Anwendung mit WinRT-Bibliotheken in Visual Studio 2012 zu erstellen. Das Code-Snippet geht wie folgt.WinRT-Bibliothek funktioniert nicht im Freigabemodus

[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; 

}

Dies die U-Bahn zur Liste verwendet wird apps Details. Und dieser Code funktioniert gut im DEBUG-Modus. Aber wenn ich es Modus freizugeben ändern, erhalte ich eine Fehlermeldung:

error LNK2001: unresolved external symbol _NtProcessStartup 

HINWEIS: Ich habe geändert bestimmte Einstellungen wie
Konfigurationseigenschaften -> C/C++ -> Verbrauchen Windows-Runtime-Ausnahme auf Ja (/ ZW)
Konfigurationseigenschaften -> C/C++ -> Codegenerierung -> Minimal Rebuild auf NO (/ gm-) aktivieren
Konfigurationseigenschaften -> C/C++ -> Codegenerierung -> Laufzeitbibliothek zu Multithread-DLL (/ MD)

Es wurde gesagt, dass diese Einstellungen für den WinRT-Bibliothek-Einschluss obligatorisch sind. Also im Grunde muss ich meinen Code im Multi_Threaded (/ MT) -Format für den Release-Modus ausführen. Aber/MT oder/Mtd ist nicht kompatibel mit (/ ZW) -Methode, die für WinRT-Bibliotheken erforderlich ist. Bitte führen Sie mich auf meine Fehler.

Antwort

0

Die Tatsache, dass Sie eine Nachricht über ein fehlendes NtProcessStartup-Symbol erhalten, impliziert, dass der Linker-Schalter /SUBSYSTEM:NATIVE verwendet wurde. Weil dies in der einzigen Option, die eine NtProcessStartup-Funktion anstelle von Wmain/Main erfordert. Ihre Optionen für den Freigabemodus haben Ihre Anwendung irgendwie als NATIVE-Anwendung (normalerweise Gerätetreiber) gekennzeichnet. (Oder Sie haben extra ein/ENTRY: NtProcessStartup hinzugefügt, aber das erscheint mir sehr unwahrscheinlich).