TypeLibConverter.ConvertTypeLibToAssembly Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Převede knihovnu typů modelu COM na sestavení.
Přetížení
ConvertTypeLibToAssembly(Object, String, Int32, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, Boolean) |
Převede knihovnu typů modelu COM na sestavení. |
ConvertTypeLibToAssembly(Object, String, TypeLibImporterFlags, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, String, Version) |
Převede knihovnu typů modelu COM na sestavení. |
ConvertTypeLibToAssembly(Object, String, Int32, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, Boolean)
Převede knihovnu typů modelu COM na sestavení.
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
Parametry
- typeLib
- Object
Objekt, který implementuje ITypeLib
rozhraní.
- asmFileName
- String
Název souboru výsledného sestavení.
- flags
- Int32
Hodnota TypeLibImporterFlags označující všechna zvláštní nastavení.
- notifySink
- ITypeLibImporterNotifySink
ITypeLibImporterNotifySink rozhraní implementované volajícím.
- publicKey
- Byte[]
Pole byte
obsahující veřejný klíč.
- keyPair
- StrongNameKeyPair
Objekt StrongNameKeyPair obsahující dvojici veřejného a privátního kryptografického klíče.
- unsafeInterfaces
- Boolean
Pokud true
rozhraní vyžadují kontrolu UnmanagedCode oprávnění v čase propojení. Pokud false
rozhraní vyžadují kontroly za běhu, které vyžadují procházení zásobníku a jsou dražší, ale pomáhají poskytovat větší ochranu.
Návraty
Objekt AssemblyBuilder obsahující převedenou knihovnu typů.
Implementuje
Výjimky
asmFileName
je prázdný řetězec.
-nebo-
asmFileName
je delší než maximální délka definovaná systémem. Další informace naleznete v tématu PathTooLongException.
Vytvořená metadata mají chyby, které brání načtení všech typů.
Poznámky
Pokud nechcete generovat silný název pro vaše sestavení, je platný pro publicKey
a keyPair
být null
, pokud flags
se nerovná TypeLibImporterFlags.PrimaryInteropAssembly. V opačném případě musí být zadán alespoň jeden z těchto parametrů. Pokud publicKey
je null
, veřejný klíč v keyPair
souboru se nastaví v metadatech manifestu cílového sestavení a na základě obsahu sestavení se vygeneruje podpis. Pokud keyPair
je null
, publicKey
nastaví se v metadatech manifestu cílového sestavení a nebude vygenerován žádný podpis. Zadání obou parametrů není obecně užitečné a může vést k neplatnému podpisu.
Další informace o nástroji ITypeLib
najdete v jeho stávající dokumentaci v knihovně MSDN.
Platí pro
ConvertTypeLibToAssembly(Object, String, TypeLibImporterFlags, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, String, Version)
Převede knihovnu typů modelu COM na sestavení.
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
Parametry
- typeLib
- Object
Objekt, který implementuje ITypeLib
rozhraní.
- asmFileName
- String
Název souboru výsledného sestavení.
- flags
- TypeLibImporterFlags
Hodnota TypeLibImporterFlags označující všechna zvláštní nastavení.
- notifySink
- ITypeLibImporterNotifySink
ITypeLibImporterNotifySink rozhraní implementované volajícím.
- publicKey
- Byte[]
Pole byte
obsahující veřejný klíč.
- keyPair
- StrongNameKeyPair
Objekt StrongNameKeyPair obsahující dvojici veřejného a privátního kryptografického klíče.
- asmNamespace
- String
Obor názvů výsledného sestavení.
- asmVersion
- Version
Verze výsledného sestavení. Pokud null
, použije se verze knihovny typů.
Návraty
Objekt AssemblyBuilder obsahující převedenou knihovnu typů.
Implementuje
Výjimky
asmFileName
je prázdný řetězec.
-nebo-
asmFileName
je delší než maximální délka definovaná systémem. Další informace naleznete v tématu PathTooLongException.
Vytvořená metadata mají chyby, které brání načtení všech typů.
Příklady
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
Poznámky
Pokud nechcete generovat silný název pro vaše sestavení, je platný pro publicKey
a keyPair
být null
, pokud flags
se nerovná TypeLibImporterFlags.PrimaryInteropAssembly. V opačném případě musí být zadán alespoň jeden z těchto parametrů. Pokud publicKey
je null
, veřejný klíč v keyPair
souboru se nastaví v metadatech manifestu cílového sestavení a na základě obsahu sestavení se vygeneruje podpis. Pokud keyPair
je null
, publicKey
nastaví se v metadatech manifestu cílového sestavení a nebude vygenerován žádný podpis. Zadání obou parametrů není obecně užitečné a může vést k neplatnému podpisu.
Další informace o nástroji ITypeLib
najdete v jeho stávající dokumentaci v knihovně MSDN.