Compartilhar via


Conversão de membro importado

Este tópico descreve como o processo de importação converte os seguintes membros:

  • Métodos

  • Propriedades

  • Eventos

Tlbimp.exe se aplica a DefaultMemberAttribute para qualquer método ou propriedade com um DispID 0. Observe que sistema autônomo desenvolvedores translation from VPE for Csharp devem tratar esses membros sistema autônomo matrizes.Para obter informações adicionais, consulte a documentação de linguagem de programação.

Métodos

Quando a interoperabilidade COM importa um tipo COM, ela produz uma assinatura do método do .NET estrutura equivalente à assinatura do método original COM.Durante o processo de conversão, ele mapeia COM parâmetros, valores de retorno e HRESULTs em uma assinatura de método do .NET estrutura, sistema autônomo mostrado na ilustração a seguir.

Conversão de assinatura de método

Você pode examinar a sintaxe do método com um visualizador de objeto ou usando reflexão, assim sistema autônomo com qualquer Outros classe .NET.Por padrão, quando o objeto COM retorna uma falha HRESULT, o tempo de execução lança uma exceção correspondente.

Propriedades

COM o desenvolvedor pode declarar propriedades e métodos em interfaces.Todas as propriedades têm correspondente acessador métodos para definir ou obter os valores de propriedade.Quando o processo de importação converte uma descrição de biblioteca de tipo de uma interface com propriedades em metadados, ele cria uma propriedade e um ou mais acessador métodos para essa propriedade.

O processo de conversão da biblioteca de tipo transforma métodos acessadores de propriedade das seguintes maneiras:

  • Propriedades com o [propget] atributo se tornam gerenciado propriedades do mesmo tipo, com um método correspondente chamado get_propertyname.

  • Propriedades com ambos o [propput] atributo de ou [propputref] atributo se tornam gerenciado propriedades do mesmo tipo, com um método correspondente chamado set_propertyname.

  • Propriedades com o [propput] and [propputref] atributos tornam-se:

    • Propriedades do mesmo tipo sistema autônomo a gerenciado**[propputref]** atributo, com um método correspondente chamado set_propertyname

    • Outro método de acessador com o mesmo tipo que o [propput] atributo, tendo o nome de let_propertyname.

A biblioteca de tipos a seguir mostra as propriedades originais.

Representação de biblioteca de tipo

interface ISample : IDispatch {
    [propget]    HRESULT prop1([out, retval] short *pVal);
    [propput]    HRESULT prop1([in] short newVal);

    [propget]    HRESULT prop2([out, retval] INew **pVal);
    [propputref] HRESULT prop2([in] INew *newVal);

    [propget]    HRESULT prop3([out, retval] INew **ppINew);
    [propput]    HRESULT prop3([in] BSTR text);
    [propputref] HRESULT prop3([in] INew *pINew);
}

As propriedades convertidas aparecem no seguinte Visual Basic 2005 fragmento de código.

Public Property 
    Get Prop1() As Integer … End Get    
    Set Prop1(val as Integer) … End Set
End Property

Public Property 
    Get Prop2() As INew … End Get 
    Set Prop2(val as INew) … End Set
End Property

Public Property
    Get Prop3() As INew … End Get 
    Set Prop3(val as INew) … End Set 
End Property

Public let_prop3(String as Text)

Eventos

Uma biblioteca de tipos COM pode definir interfaces usadas para eventos.Dentro da biblioteca, uma coclass origina evento s pode identificar o evento interface especificando o [fonte] atributo.Um coletor de eventos implementa a interface e uma fonte do evento consome-lo.As interfaces de ponto de conexão COM, que não são descritas na biblioteca de tipos, conectar-se o coletor de eventos à fonte do evento.

No exemplo a seguir IDL código, a Button classe implementa a IButton interface e origina os eventos sobre o IButtonEvents interface.

interface IButton {
    HRESULT Init();
}

interface IButtonEvents {
    HRESULT Click([in] int x, [in] int y);
    HRESULT Resize([out, retval] int *pRetval};
}

coclass Button {
    [default] interface IButton;
    [default, source] interface IButtonEvents;
}

O .NET evento modelo difere do modelo de ponto de conexão COM consideravelmente.Classes que o coletor de eventos faça passando um delegado para fonte do evento, em vez de usar pontos de conexão COM gerenciadas.O serviço de interoperabilidade COM pontes essas duas diferentes evento modelos.

Durante a importação, Tlbimp.exe cria vários tipos que permitem que um aplicativo gerenciado a eventos de coletor que são originados por classes não gerenciadas usando o modelo de evento do .NET.Na sequência de etapas a seguir, o Tlbimp.exe gera classes e interfaces para o Button classe mostrada no exemplo anterior.

  1. O processo de importação cria um tipo delegado para cada evento na interface do evento.Nomes de delegado consistem na interface de coletor de eventos, um sublinhado, o nome do evento e a palavra EventHandler.Por exemplo, na biblioteca de tipos no exemplo anterior, a Click evento torna-se IButtonEvents_ClickEventHandler delegado.

    ' A delegate for each event.
    Delegate Sub IButtonEvents_ClickEventHandler(ByVal x As Integer, _
             ByVal y As Integer)
    Delegate Function IButtonEvents_ResizeEventHandler() As Integer
    
    // A delegate for each event.
    delegate void IButtonEvents_ClickEventHandler(int x, int y);
    delegate int IButtonEvents_ResizeEventHandler();
    

    Observe que a assinatura do delegado é uma tradução direta da assinatura do método não-gerenciado.

  2. Tlbimp.exe importa a interface padrão da forma habitual, mantendo o mesmo nome da interface.Neste exemplo, a interface é chamada IButton.

    ' Direct import of original default interface.
    Public Interface IButton
        Sub Init()
    End Interface
    
    // Direct import of original default interface. 
    public interface IButton {
        void Init();
    }
    
  3. Tlbimp.exe importa o evento da forma habitual, mantendo o mesmo nome da interface da interface.Neste exemplo, a interface é chamada IButtonEvent.

    ' Direct import of original event interface. 
    ' Not of interest to managed sinks.
    Public Interface IButtonEvents
        Sub Click(ByVal x As Integer, ByVal y As Integer)
        Function Resize() As Integer
    End Interface
    
    // Direct import of original event interface.
    // Not of interest to managed sinks.
    public interface IButtonEvents {
        void Click(int x, int y);
        int Resize();
    }
    
  4. Tlbimp.exe também cria uma interface de evento segunda, designada pelo sufixo "_Event" adicionado ao nome da interface do original.Essa segunda interface de evento tem Click e Resize eventos sistema autônomo membros. Ele também tem add e remove métodos para os representantes de evento. Neste exemplo, a interface é chamada IButtonEvents_Event.

    ' Modified version of the event interface with events
    ' for managed sinks.
    
    Public Interface IButtonEvents_Event
            Sub Click As IButtonEvents_Click
            Function Resize() As IButtonEvents_Resize
            Sub add_Click(ByVal Click As IButtonEvents_ClickEventHandler)
            Sub remove_Click(ByVal Click As _
                   IButtonEvents_ClickEventHandler)
            Sub add_Resize(ByVal Resize As _
                   IButtonEvents_ResizeEventHandler)
            Sub remove_Resize(ByVal Resize As _
                   IButtonEvents_ResizeEventHandler)
        End Interface
    // Modified version of the event interface with events 
    // for managed sinks.
    public interface IButtonEvents_Event {
       IButtonEvents_Click Click;
       IButtonEvents_Resize Resize;
       void add_Click(IButtonEvents_ClickEventHandler );
       void remove_Click(IButtonEvents_ClickEventHandler );
       void add_Resize(IButtonEvents_ResizeEventHandler );
       void remove_Resize(IButtonEvents_ResizeEventHandler );
    }
    
    Observação:

    No caso raro em que você precisa converter para a interface de eventos, você converter para a interface produzida pelo Tlbimp.exe, em vez da interface do original.Por exemplo, você deve converter para IButtonEvents_Event, não IButtonEvents.

  5. Tlbimp.exe importa coclass que origina os eventos para garantir a inclusão de todas as interfaces implementadas explicitamente e ele acrescentará o nome de classe original com classes.Por exemplo, a Button coclass torna-se ButtonClass. Tlbimp.exe também produz uma interface coclsistema autônomos com o mesmo nome sistema autônomo coclsistema autônomos, que implementa a interface de eventos com o sufixo _Event.

    ' This is the imported coclass interface.
    ' Note the underscore in IButtonEvents_Event.
        Public Interface Button
            Inherits IButton
            Inherits IButtonEvents_Event
        End Interface
    
        Public Class ButtonClass
            Implements Button
            Implements IButton
            Implements IButtonEvents_Event
            Sub Init()
            End Sub 'Init
        End Class
    
    // This is the imported coclass interface.
    // Note the underscore in IButtonEvents_Event.
    public interface Button:IButton, IButtonEvents_Event {} 
    
    public class ButtonClass:Button,IButton,IButtonEvents_Event 
    {
    void Init(){}
    }
    

Consulte também

Conceitos

Conversão de biblioteca importados

Conversão de módulo importados

Conversão de tipo importado

Conversão do parâmetro importados

Outros recursos

Biblioteca de tipo de resumo de conversão de assembly