다음을 통해 공유


ISpLexicon::GetGenerationChange (Windows CE 5.0)

Send Feedback

This method gets a list of words that have changed between the current generation and a specified generation.

HRESULT GetGenerationChange(DWORD dwFlags,DWORD* pdwGeneration,SPWORDLIST* pWordList);

Parameters

  • dwFlags
    [in] Lexicon category. Possible values are defined by the SPLEXICONTYPE enumeration. Currently the value chosen must be zero for the SpLexicon (container lexicon) class. It must be the correct flag for the SpUnCompressedLexicon class, either eLEXTYPE_USER or eLEXTYPE_APP.
  • pdwGeneration
    [in, out] Pointer to the generation identifier. On input, the identifier is for the client. On output, the current current generation identifier is provided.
  • pWordList
    [in, out] Pointer to an SPWORDLIST structure containing the word list and its related information.

Return Values

The following table shows the possible return values.

Value Description
S_OK Function completed successfully.
SP_LEX_NOTHING_TO_SYNC Nothing changed because the passed in generation identifier.
SPERR_LEX_VERY_OUT_OF_SYNC There are too many changes because the passed in generation identifier, so that a change history is not available. It could also be returned after installation/uninstallation of an application lexicon. Use ISpLexicon::GetWords if GetGenerationChange returns SPERR_LEX_VERY_OUT_OF_SYNC to regenerate an entire list of words based on the current generation.
E_POINTER pdwGeneration or pWordList is not a valid write pointer.
E_INVALIDARG dwFlags is invalid.
SPERR_UNINITIALIZED Interface has not been initialized.
E_OUTOFMEMORY Exceeded available memory.
FAILED(hr) Appropriate error message.

Remarks

This method and ISpLexicon::GetGeneration can be used when an application wants to determine what it has done to the lexicon over a given period of time (for example, to remove changes it has made due to a user cancel). To do this, the application calls ISpLexicon::GetGeneration before it starts modifying the lexicon, and stores that generation identifier. Later, when the application must determine the words in the lexicon it has modified, it calls ISpLexicon::GetGenerationChange with the stored identifier. This can only be done for small changes as SPERR_LEX_VERY_OUT_OF_SYNC will be returned once sufficient changes have been made.

Example

The following is an example of this method.

for (;;)
{
  hr = pISpLexicon->GetGenerationChange(eLEXTYPE_USER,
    &m_dwGeneration,
    &spwordlist);
  // If, for example, a new application lexicon was added, 
  // rebuild from scratch.
  if (hr == SPERR_LEX_VERY_OUT_OF_SYNC)
  {
    Rebuild(); // Call GetWords
  }
  else if (FAILED(hr))
  {
    DealWithOtherErrors();
  }
  else
  {
    // Loop through the changed words, and their new pronunciations
    for (SPWORD *pword = spwordlist.pFirstWord;
      pword != NULL;
      pword = pword->pNextWord)
    {
      for (SPWORDPRON pwordpron = pword->pFirstWordPron;
       pwordpron != NULL;
       pwordpron = pwordpron->pNextWordPron)
      {
        if(pword->eWordType == eWORDTYPE_ADDED)
        {
          AddPronunciationToEngineDataStructures(
            pword->pszWord,
            pwordpron->ePartOfSpeech,
            pwordpron->pszPronIPA);
        }
        else // pword->eWordType == eWORDTYPE_DELETED
        {
          RemovePronunciationFromEngineDataStructures(
            pword->pszWord,
            pwordpron->ePartOfSpeech,
            pwordpron->pszPronIPA);
        } 
      }
    }
  }
}

Requirements

OS Versions: Windows CE .NET 4.1 and later.
Header: Sapi.h, Sapi.idl.
Link Library: Sapilib.lib.

See Also

ISpLexicon | SAPI Interfaces

Send Feedback on this topic to the authors

Feedback FAQs

© 2006 Microsoft Corporation. All rights reserved.