TypeLibConverter.ConvertTypeLibToAssembly Método

Definición

Convierte una biblioteca de tipos COM en un ensamblado.

Sobrecargas

ConvertTypeLibToAssembly(Object, String, Int32, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, Boolean)

Convierte una biblioteca de tipos COM en un ensamblado.

ConvertTypeLibToAssembly(Object, String, TypeLibImporterFlags, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, String, Version)

Convierte una biblioteca de tipos COM en un ensamblado.

ConvertTypeLibToAssembly(Object, String, Int32, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, Boolean)

Convierte una biblioteca de tipos COM en un ensamblado.

public:
 virtual System::Reflection::Emit::AssemblyBuilder ^ ConvertTypeLibToAssembly(System::Object ^ typeLib, System::String ^ asmFileName, int flags, System::Runtime::InteropServices::ITypeLibImporterNotifySink ^ notifySink, cli::array <System::Byte> ^ publicKey, System::Reflection::StrongNameKeyPair ^ keyPair, bool unsafeInterfaces);
public System.Reflection.Emit.AssemblyBuilder ConvertTypeLibToAssembly (object typeLib, string asmFileName, int flags, System.Runtime.InteropServices.ITypeLibImporterNotifySink notifySink, byte[] publicKey, System.Reflection.StrongNameKeyPair keyPair, bool unsafeInterfaces);
abstract member ConvertTypeLibToAssembly : obj * string * int * System.Runtime.InteropServices.ITypeLibImporterNotifySink * byte[] * System.Reflection.StrongNameKeyPair * bool -> System.Reflection.Emit.AssemblyBuilder
override this.ConvertTypeLibToAssembly : obj * string * int * System.Runtime.InteropServices.ITypeLibImporterNotifySink * byte[] * System.Reflection.StrongNameKeyPair * bool -> System.Reflection.Emit.AssemblyBuilder
Public Function ConvertTypeLibToAssembly (typeLib As Object, asmFileName As String, flags As Integer, notifySink As ITypeLibImporterNotifySink, publicKey As Byte(), keyPair As StrongNameKeyPair, unsafeInterfaces As Boolean) As AssemblyBuilder

Parámetros

typeLib
Object

Objeto que implementa la interfaz ITypeLib.

asmFileName
String

Nombre de archivo del ensamblado resultante.

flags
Int32

Valor TypeLibImporterFlags que indica cualquier configuración especial.

notifySink
ITypeLibImporterNotifySink

Interfaz ITypeLibImporterNotifySink implementada por el que llama.

publicKey
Byte[]

Matriz de byte que contiene la clave pública.

keyPair
StrongNameKeyPair

Objeto StrongNameKeyPair que contiene el par de claves criptográficas públicas y privadas.

unsafeInterfaces
Boolean

Si es true, las interfaces requieren que, en el momento de la vinculación, se compruebe si se dispone del permiso UnmanagedCode. Si es false, las interfaces necesitan comprobaciones en tiempo de ejecución que requieren un recorrido de la pila; son más caras pero proporcionan una protección mayor.

Devoluciones

Objeto AssemblyBuilder que contiene la biblioteca de tipos convertida.

Implementaciones

Excepciones

typeLib es null.

O bien

asmFileName es null.

O bien

notifySink es null.

asmFileName es una cadena vacía.

o bien

asmFileName es mayor que la longitud máxima definida por el sistema. Para obtener más información, vea PathTooLongException.

flags no es PrimaryInteropAssembly.

o bien

publicKey y keyPair son null.

Los metadatos producidos tienen errores que evitan que se carguen los tipos.

Comentarios

Si no desea generar un nombre seguro para el ensamblado, es válido para publicKey y para que sea null, siempre flags y keyPair cuando no sea igual a TypeLibImporterFlags.PrimaryInteropAssembly. De lo contrario, se debe especificar al menos uno de estos parámetros. Si publicKey es null, la clave pública de se establecerá en keyPair los metadatos del manifiesto del ensamblado de destino y se generará una firma en función del contenido del ensamblado. Si keyPair es null, publicKey se establecerá en los metadatos del manifiesto del ensamblado de destino y no se generará ninguna firma. La especificación de ambos parámetros no suele ser útil y puede dar lugar a una firma no válida.

Para obtener más información sobre ITypeLib, consulte su documentación existente en MSDN Library.

Se aplica a

ConvertTypeLibToAssembly(Object, String, TypeLibImporterFlags, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, String, Version)

Convierte una biblioteca de tipos COM en un ensamblado.

public:
 virtual System::Reflection::Emit::AssemblyBuilder ^ ConvertTypeLibToAssembly(System::Object ^ typeLib, System::String ^ asmFileName, System::Runtime::InteropServices::TypeLibImporterFlags flags, System::Runtime::InteropServices::ITypeLibImporterNotifySink ^ notifySink, cli::array <System::Byte> ^ publicKey, System::Reflection::StrongNameKeyPair ^ keyPair, System::String ^ asmNamespace, Version ^ asmVersion);
public System.Reflection.Emit.AssemblyBuilder ConvertTypeLibToAssembly (object typeLib, string asmFileName, System.Runtime.InteropServices.TypeLibImporterFlags flags, System.Runtime.InteropServices.ITypeLibImporterNotifySink notifySink, byte[] publicKey, System.Reflection.StrongNameKeyPair keyPair, string asmNamespace, Version asmVersion);
abstract member ConvertTypeLibToAssembly : obj * string * System.Runtime.InteropServices.TypeLibImporterFlags * System.Runtime.InteropServices.ITypeLibImporterNotifySink * byte[] * System.Reflection.StrongNameKeyPair * string * Version -> System.Reflection.Emit.AssemblyBuilder
override this.ConvertTypeLibToAssembly : obj * string * System.Runtime.InteropServices.TypeLibImporterFlags * System.Runtime.InteropServices.ITypeLibImporterNotifySink * byte[] * System.Reflection.StrongNameKeyPair * string * Version -> System.Reflection.Emit.AssemblyBuilder
Public Function ConvertTypeLibToAssembly (typeLib As Object, asmFileName As String, flags As TypeLibImporterFlags, notifySink As ITypeLibImporterNotifySink, publicKey As Byte(), keyPair As StrongNameKeyPair, asmNamespace As String, asmVersion As Version) As AssemblyBuilder

Parámetros

typeLib
Object

Objeto que implementa la interfaz ITypeLib.

asmFileName
String

Nombre de archivo del ensamblado resultante.

flags
TypeLibImporterFlags

Valor TypeLibImporterFlags que indica cualquier configuración especial.

notifySink
ITypeLibImporterNotifySink

Interfaz ITypeLibImporterNotifySink implementada por el que llama.

publicKey
Byte[]

Matriz de byte que contiene la clave pública.

keyPair
StrongNameKeyPair

Objeto StrongNameKeyPair que contiene el par de claves criptográficas públicas y privadas.

asmNamespace
String

Espacio de nombres para el ensamblado resultante.

asmVersion
Version

Versión del ensamblado resultante. Si null, se utilizará la versión de la biblioteca de tipos.

Devoluciones

Objeto AssemblyBuilder que contiene la biblioteca de tipos convertida.

Implementaciones

Excepciones

typeLib es null.

O bien

asmFileName es null.

O bien

notifySink es null.

asmFileName es una cadena vacía.

o bien

asmFileName es mayor que la longitud máxima definida por el sistema. Para obtener más información, vea PathTooLongException.

flags no es PrimaryInteropAssembly.

o bien

publicKey y keyPair son null.

Los metadatos producidos tienen errores que evitan que se carguen los tipos.

Ejemplos

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Runtime::InteropServices;

enum class RegKind
{
   RegKind_Default, RegKind_Register, RegKind_None
};

ref class ConversionEventHandler: public ITypeLibImporterNotifySink
{
public:
   virtual void ReportEvent( ImporterEventKind eventKind, int eventCode, String^ eventMsg )
   {
      
      // handle warning event here...
   }

   virtual Assembly^ ResolveRef( Object^ typeLib )
   {
      
      // resolve reference here and return a correct assembly...
      return nullptr;
   }

};


[DllImport("oleaut32.dll",CharSet=CharSet::Unicode,PreserveSig=false)]
extern void LoadTypeLibEx( String^ strTypeLibName, RegKind regkind,
         [MarshalAs(UnmanagedType::Interface)] interior_ptr<Object^> typeLib );

int main()
{
   Object^ typeLib = gcnew Object;
   LoadTypeLibEx( "SHDocVw.dll", RegKind::RegKind_None,  &typeLib );
   if ( typeLib == nullptr )
   {
      Console::WriteLine( "LoadTypeLibEx failed." );
      return 0;
   }

   TypeLibConverter^ converter = gcnew TypeLibConverter;
   ConversionEventHandler^ eventHandler = gcnew ConversionEventHandler;
   AssemblyBuilder^ asmb = converter->ConvertTypeLibToAssembly( typeLib, "ExplorerLib.dll", (System::Runtime::InteropServices::TypeLibImporterFlags)0, eventHandler, nullptr, nullptr, nullptr, nullptr );
   asmb->Save( "ExplorerLib.dll" );
}
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.InteropServices;

public class App
{
    private enum RegKind
    {
        RegKind_Default = 0,
        RegKind_Register = 1,
        RegKind_None = 2
    }
    
    [ DllImport( "oleaut32.dll", CharSet = CharSet.Unicode, PreserveSig = false )]
    private static extern void LoadTypeLibEx( String strTypeLibName, RegKind regKind, 
        [ MarshalAs( UnmanagedType.Interface )] out Object typeLib );
    
    public static void Main()
    {
        Object typeLib;
        LoadTypeLibEx( "SHDocVw.dll", RegKind.RegKind_None, out typeLib ); 
        
        if( typeLib == null )
        {
            Console.WriteLine( "LoadTypeLibEx failed." );
            return;
        }
            
        TypeLibConverter converter = new TypeLibConverter();
        ConversionEventHandler eventHandler = new ConversionEventHandler();
        AssemblyBuilder asm = converter.ConvertTypeLibToAssembly( typeLib, "ExplorerLib.dll", 0, eventHandler, null, null, null, null );	
        asm.Save( "ExplorerLib.dll" );
    }
}

public class ConversionEventHandler : ITypeLibImporterNotifySink
{
    public void ReportEvent( ImporterEventKind eventKind, int eventCode, string eventMsg )
    {
        // handle warning event here...
    }
    
    public Assembly ResolveRef( object typeLib )
    {
        // resolve reference here and return a correct assembly...
        return null; 
    }	
}
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Runtime.InteropServices

Public Class App
    Private Enum RegKind
        RegKind_Default = 0
        RegKind_Register = 1
        RegKind_None = 2
    End Enum 'RegKind

    <DllImport("oleaut32.dll", CharSet:=CharSet.Unicode, PreserveSig:=False)> _
    Private Shared Sub LoadTypeLibEx(ByVal strTypeLibName As [String], ByVal regKind As RegKind, <MarshalAs(UnmanagedType.Interface)> ByRef typeLib As [Object])
    End Sub

    Public Shared Sub Main()
        Dim typeLib As [Object]
        LoadTypeLibEx("SHDocVw.dll", RegKind.RegKind_None, typeLib)

        If typeLib Is Nothing Then
            Console.WriteLine("LoadTypeLibEx failed.")
            Return
        End If

        Dim converter As New TypeLibConverter()
        Dim eventHandler As New ConversionEventHandler()
        Dim asm As AssemblyBuilder = converter.ConvertTypeLibToAssembly(typeLib, "ExplorerLib.dll", 0, eventHandler, Nothing, Nothing, Nothing, Nothing)
        asm.Save("ExplorerLib.dll")
    End Sub
End Class
 _

Public Class ConversionEventHandler
    Implements ITypeLibImporterNotifySink

    Public Sub ReportEvent(ByVal eventKind As ImporterEventKind, ByVal eventCode As Integer, ByVal eventMsg As String) Implements ITypeLibImporterNotifySink.ReportEvent
        ' handle warning event here...
    End Sub

    Public Function ResolveRef(ByVal typeLib As Object) As [Assembly] Implements ITypeLibImporterNotifySink.ResolveRef
        ' resolve reference here and return a correct assembly...
        Return Nothing
    End Function 'ResolveRef
End Class

Comentarios

Si no desea generar un nombre seguro para el ensamblado, es válido para publicKey y para que sea null, siempre flags y keyPair cuando no sea igual a TypeLibImporterFlags.PrimaryInteropAssembly. De lo contrario, se debe especificar al menos uno de estos parámetros. Si publicKey es null, la clave pública de se establecerá en keyPair los metadatos del manifiesto del ensamblado de destino y se generará una firma en función del contenido del ensamblado. Si keyPair es null, publicKey se establecerá en los metadatos del manifiesto del ensamblado de destino y no se generará ninguna firma. La especificación de ambos parámetros no suele ser útil y puede dar lugar a una firma no válida.

Para obtener más información sobre ITypeLib, consulte su documentación existente en MSDN Library.

Se aplica a