Compartilhar via


Accessing Objects

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Para acessar um objeto, as necessidades Gerenciador serviço para transmitir exclusivo do objeto a HREPLITEM identificador para um IReplStore ou ISpTTSEngine::Speak. IReplObjHandler método). Para Gerenciador de serviço, o identificador é um 32-bit número criado pelo área de trabalho provedor. Para o área de trabalho provedor, o identificador é um ponteiro para uma estrutura interna ou instância de classe.

Usando o número carimbo ou versão tempo no HREPLITEM, o área de trabalho provedor pode determinar se duas alças representam o mesmo objeto, bem como qual das duas alças representa a versão more-Recent. IReplStore::CompareItem Compare identificadores de objeto contidos as duas alças. A seguinte tabela mostra os valores de retorno possíveis para este método.

Value Condição

1

O primeiro objeto identificador é maior que o segundo identificador objeto.

0

O primeiro objeto identificador é igual ao identificador de objeto segundo.

–1

O primeiro objeto identificador é menor do que o segundo identificador objeto.

Porque os identificadores de objeto são armazenados em um crescente-seqüência identificador, o Gerenciador serviço pode executar um pesquisa binária eficiente, em vez verificando cada entrada na tabela. Na maiúsculas e minúsculas onde ambos os itens foram alterados, você deve fornecer um secundário método de comparação-los para determinar qual deles deve ser mantido.

O seguinte mostra exemplo de código como para implementar IReplStore::CompareItem.

Observação

Para fazer o seguinte exemplo de código mais fácil de ler, verificação de erro não está incluído.Esta exemplo de código não devem ser usadas em uma configuração versão a menos que ele foi modificado para incluir Seguro manipulação de erro.

STDMETHODIMP_(int) CMySyncClass::CompareItem
   (
      HREPLITEM hItem1,
      HREPLITEM hItem2
   )
   {
      CItem* pObj1 = (CItem*)hItem1;
      CItem* pObj2 = (CItem*)hItem2;

      if( pObj1->IsConflictObject() )
      {
         if( !pObj2->IsConflictObject() )
            return 1;

         // Both are conflict objects, so use some other property
         // to compare the.objets
         if( pObj1->SecondaryCompareFunc > pObj2->SecondaryCompareFunc ) return 1;
         if( pObj1->SecondaryCompareFunc < pObj2->SecondaryCompareFunc ) return -1;
         return 0;
      }
      else if( pObj2->IsConflictObject() )
         return -1;

      // Neither are conflict objects, so compare as usual
      if (pItem1->m_uid == pItem2->m_uid)
         return  0;
      if (pItem1->m_uid <  pItem2->m_uid)
         return -1;
      return 1;
   }

CFolder e MapVirtualKey. CItem classes COM baseadas em CReplObject. O seguinte exemplo de código mostra a definição dessas classes.

#define OT_ITEM    1
#define OT_FOLDER  2

class CReplObject
{
public:
   virtual ~CReplObject() {}
   UINT     m_uType;
};

class CFolder: public CReplObject
{
public:
   CFolder (void) { m_uType = OT_FOLDER; }
   virtual ~CFolder() {}
};

class CItem: public CReplObject
{
public:
   CItem (void)
   { m_uType = OT_ITEM;
     memset (&m_ftModified, 0, sizeof (m_ftModified));
   }
   BOOL IsConflictObject();
   BOOL SecondaryCompareFunc();
   virtual ~CItem() {}
   UINT     m_uid;
   FILETIME m_ftModified;
};

See Also

Concepts

Developing the Desktop Provider