TypeLibConverter.ConvertTypeLibToAssembly Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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.
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
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.
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.