2016-06-02 4 views
0

Visual Studio 2012에서 WinRT 라이브러리를 사용하여 데스크톱 응용 프로그램을 빌드하려고했습니다. 코드 조각은 다음과 같습니다. 이 지하철을 나열하는 데 사용됩니다릴리스 모드에서 작동하지 않는 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; 

}는 세부 사항을 애플 리케이션. 그리고이 코드는 DEBUG 모드에서 잘 작동합니다. > C/C++ - -> 소비 Windows 런타임 예외 예에 내가
구성 속성 등의 특정 설정을 변경했습니다 :

error LNK2001: unresolved external symbol _NtProcessStartup 

참고 : 나는 모드를 해제 변경할 때, 나는 오류를 얻고있다 (/ gm-)
구성 속성 -> C/C++ -> 코드 생성 -> NO (/ gm-)로 최소 재 작성 가능 구성 등록 정보 -> C/C++ -> 코드 생성 -> 런타임 다중 스레드 DLL/MD)

이 설정은 WinRT 라이브러리 포함에 필수 사항이라고합니다. 기본적으로 릴리스 모드에서는 Multi_Threaded (/ MT) 형식으로 코드를 실행해야합니다. 그러나/MT 또는/Mtd는 WinRT 라이브러리에 필요한 (/ ZW) 메서드와 호환되지 않습니다. 실수로 나를 안내하십시오.

답변

0

누락 된 NtProcessStartup 기호에 대한 메시지를받는 사실은 링커 스위치 /SUBSYSTEM:NATIVE이 사용되었음을 의미합니다. 왜냐하면 wmain/main 대신에 NtProcessStartup 함수가 필요한 유일한 옵션이기 때문입니다. 따라서 릴리스 모드 옵션을 사용하면 응용 프로그램이 네이티브 (대개 장치 드라이버) 응용 프로그램으로 표시됩니다. (또는 구체적으로/ENTRY : NtProcessStartup을 추가했으나 나에게는 거의 그렇지 않습니다.)