IT 이모저모

사용할 수없는 UWP API

exien 2018. 3. 6. 17:35

사용할 수없는 UWP API

공식 문서에 의한 해설

 불행히도 모든 UWP API를 .NET Framework 응용 프로그램에서 사용할 수있는 것은 아닙니다. 대략적으로 말하면, 다음과 같은 API는 사용할 수 없습니다.

[사용할 수없는 UWP API]

  • 주로 UI위한 API
  • 내부적으로 UWP 패키지 ID를 사용하는 API (UWP 포장하면 이용 가능)

 첫 번째 그룹은 엄격하게 말하면 형태 정의에 DualApiPartition 속성 이 지정되지 않은 API입니다 (Microsoft API 설명서 클래스 등의 페이지에 부여되는 속성 목록이 포함되어 있습니다). UI 용 제어 장치 외에 이전 의 IsApiContractPresent 등이 포함됩니다.

 형식 정의에 DualApiPartition 특성을 가진 API에서도 사용할 수없는 것이 있습니다. 그것이 두 번째 그룹입니다. UWP 앱 패키지 ( ".appx"파일)에 붙어있는 패키지 ID는 API의 동작에 필요한 경우가 있습니다. 이러한 API는 .NET Framework 응용 프로그램에서 사용할 수 없습니다 (단, 데스크톱 브리지 에서 UWP 패키지로 변환하면 기존의 데스크톱 응용 프로그램에서 사용할 수 있습니다).

실제로는 상당히 애매 모호

 이상이 공식 문서 를 기반으로 설명합니다. 하지만 API의 동작에 패키지 ID가 필요한지 여부는 문서에 기록되지 않은 것 같고, DualApiPartition 속성이 붙어 있지 않은 API에서도 사용할 수 있습니다 (이번 후리가나 용 API도 그렇습니다). 결국, "시도하지 않으면 알 수 없다" 라는 것이 될 것입니다. 또한 " 패키지 데스크톱 응용 프로그램에서 사용할 수있는 UWP API (데스크톱 브릿지) "에 사용할 수 UWP API 목록이 실려 있는데, 불완전합니다 (예를 들어,이 글을 쓰는 시점에서는 패키지 ID를 필요로하는 Windows .Storage.ApplicationData가 데스크톱 응용 프로그램에서 사용할 수있는 사람으로 분류되어 있습니다).

 덧붙여서 사용할 수없는 API를 호출하려고하면 다음 그림과 같이합니다 (Visual Studio 2015).

.NET Framework 응용 프로그램에서 전혀 사용할 수없는 API
.NET Framework 응용 프로그램에서 전혀 사용할 수없는 API는 코딩시에 경고가 나온다
패키지 ID가 필요한 API
이용하는 패키지 ID가 필요한 API는 런타임 예외가 나온다

읽기 가명을 취득하는 API 사용

 이번 코드 에서 사용하는 UWP API는 Windows.Data.Text 네임 스페이스 것입니다. 샘플 코드 MainWindow.xaml.cs 후반 TextBox_TextChanged 메소드에서 쫓아하십시오.

  • TextReverseConversionGenerator : 읽기 가명을 취득하는 클래스
  • TextConversionGenerator : 읽기에서 한자 가나 섞인 문자열의 후보를 취득하는 클래스
  • TextPhoneme : 음소 (형태소)를 나타내는 클래스 (1607/14393 이상)

문자열 전체 읽기 가명을 얻을

 TextReverseConversionGenerator 의 ConvertBackAsync 메소드를 사용합니다 (다음 코드). 이것을 사용하여 예를 들어, 목록의 정렬을 일본어 읽기 가명 순서로하는 것 등도 쉽게 할 수 있군요.

문자열 전체 읽기 가명을 얻을
string inputText = ... 생략 ...

// 읽기 가명을 취득하기위한 클래스
var trcg = new Windows.Data.Text.TextReverseConversionGenerator ( "ja");

// 문자열 전체 읽기 가명 가져 오기 (Win10 모든 버전)
var yomi = await trcg. ConvertBackAsync (inputText);

후리가나 위해 형태소 단위의 읽기 가져 오기 (1607/14393 이상)

 TextReverseConversionGenerator 의 GetPhonemesAsync 메소드를 사용합니다 (다음 코드). 형태소별로 분할되어 TextPhoneme 개체의 컬렉션으로 결과가 되돌아옵니다. TextPhoneme에는 분할 된 원래 문자열 (DisplayText 속성)과 읽기 (ReadingText 속성)이 들어 있습니다. 원래 문자열 읽기가 다른 경우는 한자가 포함되어있는 것이라고 판단 할 수 있습니다.

후리가나 위해 형태소 단위의 읽기 가져 오기 (1607/14393 이상)
string inputText = ... 생략 ...

// 읽기 가명을 취득하기위한 클래스
var trcg = new Windows.Data.Text.TextReverseConversionGenerator ( "ja");

// 형태소 분해하여 읽으 가명을 개별적으로 취득하는 (14393 이상)
IReadOnlyList <Windows.Data.Text.TextPhoneme> textPhonemeList
  = await trcg. GetPhonemesAsync (inputText);

foreach (var phoneme in textPhonemeList)
{
  string text = phoneme. DisplayText ; // 원래 문자열을 분해 한 것
  string ruby = phoneme. ReadingText ; // 그 읽기
  if (text! = ruby)
  {
    // ruby를 후리가나로 처리
  }
}

가나 한자 변환 후보를 얻을

 TextConversionGenerator 의 GetCandidatesAsync 메소드를 사용하면, 히라가나 문자열 카나 한자 변환했을 때 후보 목록을 얻을 수 있습니다 (아래 코드). 실제 IME에 의한 변환 후보와는 다른 것 같습니다.

가나 한자 변환 후보를 얻을
string yomi = ... 생략 ...

// 읽기 가명에서 한자 변환 (Win10 모든 버전)
var tcg = new Windows.Data.Text.TextConversionGenerator ( "ja");
IReadOnlyList <string> candidatesList = await tcg. GetCandidatesAsync (yomi);

형태소 분석에 특화된 API

 UWP의 API는 Windows 8.1에서 JapanesePhoneticAnalyzer 클래스 (Windows.Globalization 이름 공간)라는 것도 있습니다.

 JapanesePhoneticAnalyzer는 TextReverseConversionGenerator과 달리 형태소 분석 만 전문으로 두 종류의 분석 모드를 가지고 있습니다. 그러나 전체 문자열 읽기 가명은 돌려주지 않기 때문에 읽기 가명을 얻으려면 형태소 단위의 읽기를 일일이 연결해야합니다. 또한 입력 중 반각 문자를 전각 문자로 해주고 버리는 곤란한 사양도 있습니다 (TextReverseConversionGenerator도 마찬가지 였지만, 14393 기준에서 반각 문자는 반각으로 출력되도록 변경되었습니다) .

 JapanesePhoneticAnalyzer에서 읽기 가명을 얻는 방법은 필자의 샘플 코드 를 참조하십시오.


'IT 이모저모' 카테고리의 다른 글

C # 역방향 레시피 - 1  (0) 2018.03.06
수동으로 설치하는 방법  (0) 2018.03.06
WPF등의 .NET 응용 프로그램에서 UWP API를 사용하기  (0) 2018.03.06
하웨이, '메이트 20' 공개  (0) 2018.03.06
Android Link  (0) 2018.03.05