PROBLEMA: Recursos do IntelliSense não aparecem no Visual Basic 6.0 para componentes de interoperabilidade de COM do .NET

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 813809
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando você registra um Microsoft Visual Basic .NET Component para interoperabilidade COM no registro usando a opção registrar para interoperabilidade COM no Visual Studio. NET, os recursos do IntelliSense para os métodos e propriedades das classes não aparecem no seu Visual Basic 6.0 aplicativo. Além disso, você não pode usar ligação inicial para vincular a um método ou uma propriedade.
Causa
Esse problema ocorre nas seguintes situações:
  1. Quando você usa a opção registrar para interoperabilidade COM , o processo de compilação do Visual Studio .NET chama a ferramenta de RegAsm com o / TLB e as opções / CODEBASE para registrar o componente .NET para COM Interop.
  2. Quando você chama a ferramenta de RegAsm, Visual Studio .NET cria um CCW (COM callable wrapper) e uma biblioteca de tipos assembly de interoperabilidade.
  3. A biblioteca de tipos está registrada e atua como um objeto COM para acessar o assembly .NET.
  4. Por padrão, a ferramenta de RegAsm cria uma biblioteca de tipos que expõe uma interface IDispatch não dual, vazia. Portanto, você não pode usar ligação inicial. Se você não usar ligação inicial, os recursos do IntelliSense não aparecem.
Resolução
Para resolver esse problema, defina uma interface pública utilizando métodos e propriedades que você deseja expor no TLB e implementam a interface na classe. Além disso, adicione o atributo ClassInterface (ClassInterfaceType.None) para a classe. À medida que você desenvolve o componente, você pode usar essa abordagem para evitar usar o atributo ComVisible(False) . O código nas etapas a seguir demonstra como fazer isso:
  1. Crie um novo projeto Class Library usando Visual Basic. NET. Nomeie o projeto MyClassLibrary . Por padrão, Class1 é criado.
  2. Substitua o código existente com o código a seguir:
    Option Strict OnImports SystemImports System.Runtime.InteropServicesNamespace MyClassLibrary   ' Interface with members to be exposed in the TLB   Public Interface IMyInterface      Function MyFunction() As String      Property MyProperty() As Int32   End Interface   ' Class that implements the Interface   <ClassInterface(ClassInterfaceType.None)> _      Public Class MyTestClass : Implements IMyInterface      Public Function MyFunction() As String Implements IMyInterface.MyFunction         Return "You have successfully accessed Visual Basic .NET library."      End Function      Public Property MyProperty() As Integer Implements IMyInterface.MyProperty         Get            Return 100         End Get         Set(ByVal Value As Integer)         End Set      End Property   End ClassEnd Namespace
  3. No Solution Explorer, clique com o botão direito do mouse o nome do projeto e, em seguida, clique em Propriedades .
  4. Expanda Configuration Properties e, em seguida, clique em Build .
  5. Clique para selecionar Register for COM interop caixa de seleção.
  6. No menu Build , clique em Build Solution para criar MyClassLibrary.dll.
Situação
Esse comportamento é por design.
Mais Informações

Passos para reproduzir o problema

  1. Crie um novo projeto Class Library usando Visual Basic. NET. Nomeie o projeto MyTestClassLibrary . Por padrão, Class1 é criado.
  2. Substitua o código existente com o código a seguir:
    Option Strict OnImports SystemImports System.Runtime.InteropServicesNamespace MyTestClassLibrary      Public Class MyTestClass       Public Function MyFunction() As String          Return "You have successfully accessed Visual Basic .NET library."      End Function      Public Property MyProperty() As Integer         Get            Return 100         End Get         Set(ByVal Value As Integer)         End Set      End Property   End ClassEnd Namespace
  3. No Solution Explorer, clique com o botão direito do mouse o nome do projeto e, em seguida, clique em Propriedades .
  4. Expanda Configuration Properties e, em seguida, clique em Build .
  5. Siga um destes procedimentos:
    • No Visual Basic. NET, clique para selecionar a caixa de seleção Register for COM interop .

      - ou -
    • No Visual translation from VPE for Csharp. NET, defina a propriedade Register for COM interop para true.
  6. No menu Build , clique em Build Solution para criar MyTestClassLibrary.dll.
  7. Crie um novo projeto Standard Exe no Visual Basic 6.0.
  8. No menu Project , clique em referências .
  9. Na lista referências , clique duas vezes para selecionar MyTestClassLibrary e, em seguida, clique em OK .
  10. Clique duas vezes em Form1 para abrir o código de eventos Form_Load .
  11. Digite o código a seguir. Observe que o recurso IntelliSense não aparece quando você digitar o nome de método.
    ' Create an instance of .NET Component.   Dim obj As New MyTestClassLibrary.MyTestClass   ' Note that the IntelliSense feature does not show MyFunction.   MsgBox obj.MyFunction
Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
316163PROBLEMA: Mensagem de erro ao tentar criar um projeto de biblioteca de classe: registro de interoperabilidade COM falha

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 813809 - Última Revisão: 12/08/2015 01:58:13 - Revisão: 1.1

Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbregistry kbdll kbcominterop kbprb KB813809 KbMtpt
Comentários