Compartilhar via


Considerações Geral para interoperação

Todas as chamadas feitas entre códigos gerenciado e devem negociar os requisitos impostos por cada modelo de programação respectivo.Modelos de programação gerenciado e são diferentes em vários aspectos.A tabela a seguir mostra as características de definição de cada modelo.

Característica

Modelo não gerenciado

gerenciado modelo

Modelo de codificação

Baseada em interface

Baseada em objeto

Identidade

GUIDs

Nomes fortes

Mecanismo de tratamento de erro

HRESULTs

Exceções

Tipo de compatibilidade

Binário padrão

Tipo padrão

Definição de tipo

Biblioteca de tipos

Metadados

Segurança de tipos

Tipo não seguro

Opcionalmente, segurança

Versionamento

Imutável

Resistente

Algumas características do modelo de programação associou a entidades que você pode exibir, sistema autônomo bibliotecas de tipos e metadados.Alguns você pode passar sistema autônomo argumentos, sistema autônomo GUIDs e nomes de alta segurança.Outras características são mais conceituais; sem dúvida, você irá considerar seu impacto em seu design de aplicativo, mas você não encontrará mapeamento direto entre os modelos gerenciado e para as seguintes características.

As seções a seguir explicam cada característica em mais detalhes.

  • Modelos de codificação
    Objetos não gerenciado sempre se comunicar através de interfaces; classes e objetos gerenciado podem passar dados diretamente sem implementar interfaces.

    Por padrão, a interoperabilidade COM gera uma interface de classe para expor gerenciado funcionalidade por meio de uma interface de COM quando o objeto ou classe não implementa um.

  • Mecanismos de manipulação de erro
    Métodos COM geralmente retornam um HRESULT, indicando que a telefonar teve êxito ou falha.Código gerenciado incorpora exceções.Por padrão, a interoperabilidade COM mapeia exceções gerenciadas HRESULTs falha.

  • Identidades
    GUIDs identificam um tipo específico de não gerenciado e fornecem informações sem local para esse tipo.Nomes de alta segurança consistem em um nome de assembly exclusivo juntamente com um nome de tipo.Como o nome do assembly identifica com exclusividade o tipo, você pode reutilizar um nome de tipo entre vários conjuntos de módulos.Um assembly também apresenta o publicador chave, versão e informações sobre o local para um tipo gerenciado.Serviços de interoperação geram GUIDs e são fortes conforme necessário.

  • Estruturas de dados antigo sem formatação (PODS)
    Invocação de plataforma não pode ser usado para retornar classes ou estruturas por valor se eles contiverem um construtor.Em geral, tipos definidos pelo usuário que contêm elementos PODS não devem ser retornados por referência.PODS são estruturas de dados que contêm apenas passivas coleções de valores do campo, conforme definido pela ISO/IEC 14882 padrão, "linguagens de programação — C++." Eles não contêm construtores, copiar PODS de operadores de atribuição, destruidores ou membros de dados não-estático que não são propriamente ditas.

  • Tipo de compatibilidade
    Tipos variam entre código gerenciado e e também entre os idiomas.

  • Definições de tipo
    Se você estiver acostumado a trabalhar com bibliotecas de tipos, você saberá que elas contêm tipos públicos somente.Além disso, uma biblioteca de tipos é opcional.No modelo de programação gerenciado, é obrigatórias para todos os tipos de informações de tipo.Serviços de interoperação fornecem ferramentas converter bibliotecas de tipos em metadados em módulos (assemblies) e metadados para bibliotecas de tipos.

  • Segurança de tipos
    Compiladores não-gerenciados não fornecem nenhum tipo de verificação em tipos de ponteiro, tornar o código suscetível a atividade potencialmente prejudicial.Em geral, o código gerenciado requer um nível mais alto de confiança.Os programadores podem continuar a usar ponteiros no código gerenciado, embora o código tem restrições por causa de seu comportamento inseguro.Serviços interoperação impedir código gerenciado, não confiável de acessar código não gerenciado.

  • Versionamento
    Interfaces COM são imutáveis.Se você alterar uma interface, você deve renomeá-lo com um novo GUID.Tipos gerenciado podem evoluir enquanto mantém o mesmo nome.

Consulte também

Outros recursos

Considerações sobre design de interoperação