TypeLibConverter.ConvertTypeLibToAssembly 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
COM 형식 라이브러리를 어셈블리로 변환합니다.
오버로드
| Name | Description |
|---|---|
| ConvertTypeLibToAssembly(Object, String, Int32, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, Boolean) |
COM 형식 라이브러리를 어셈블리로 변환합니다. |
| ConvertTypeLibToAssembly(Object, String, TypeLibImporterFlags, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, String, Version) |
COM 형식 라이브러리를 어셈블리로 변환합니다. |
ConvertTypeLibToAssembly(Object, String, Int32, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, Boolean)
COM 형식 라이브러리를 어셈블리로 변환합니다.
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
매개 변수
- typeLib
- Object
인터페이스를 구현하는 개체입니다 ITypeLib .
- asmFileName
- String
결과 어셈블리의 파일 이름입니다.
- flags
- Int32
TypeLibImporterFlags 특수 설정을 나타내는 값입니다.
- notifySink
- ITypeLibImporterNotifySink
ITypeLibImporterNotifySink 호출자가 구현한 인터페이스입니다.
- publicKey
- Byte[]
byte 공개 키를 포함하는 배열입니다.
- keyPair
- StrongNameKeyPair
StrongNameKeyPair 퍼블릭 및 프라이빗 암호화 키 쌍을 포함하는 개체입니다.
- unsafeInterfaces
- Boolean
이 경우 true인터페이스에 사용 권한에 대한 UnmanagedCode 링크 시간 검사가 필요합니다. 인터페이스 false에 스택 워크가 필요하고 비용이 많이 드는 런타임 검사가 필요하지만 더 큰 보호를 제공하는 데 도움이 됩니다.
반품
AssemblyBuilder 변환된 형식 라이브러리를 포함하는 개체입니다.
구현
예외
생성된 메타데이터에는 모든 형식이 로드되지 않도록 하는 오류가 있습니다.
설명
어셈블리에 대한 강력한 이름을 생성하지 않으려면 동일하지 않는 한 유효 publicKey 합니다 keyPairnullflags.TypeLibImporterFlags.PrimaryInteropAssembly 그렇지 않으면 이러한 매개 변수 중 하나 이상을 지정해야 합니다. 이 publicKey경우 null 공개 키가 keyPair 대상 어셈블리의 매니페스트 메타데이터에 설정되고 어셈블리의 내용에 따라 서명이 생성됩니다. 이 keyPairnull 경우 publicKey 대상 어셈블리의 매니페스트 메타데이터에 설정되며 서명이 생성되지 않습니다. 두 매개 변수를 모두 지정하는 것은 일반적으로 유용하지 않으며 잘못된 서명이 발생할 수 있습니다.
자세한 ITypeLib내용은 MSDN 라이브러리의 기존 설명서를 참조하세요.
적용 대상
ConvertTypeLibToAssembly(Object, String, TypeLibImporterFlags, ITypeLibImporterNotifySink, Byte[], StrongNameKeyPair, String, Version)
COM 형식 라이브러리를 어셈블리로 변환합니다.
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
매개 변수
- typeLib
- Object
인터페이스를 구현하는 개체입니다 ITypeLib .
- asmFileName
- String
결과 어셈블리의 파일 이름입니다.
- flags
- TypeLibImporterFlags
TypeLibImporterFlags 특수 설정을 나타내는 값입니다.
- notifySink
- ITypeLibImporterNotifySink
ITypeLibImporterNotifySink 호출자가 구현한 인터페이스입니다.
- publicKey
- Byte[]
byte 공개 키를 포함하는 배열입니다.
- keyPair
- StrongNameKeyPair
StrongNameKeyPair 퍼블릭 및 프라이빗 암호화 키 쌍을 포함하는 개체입니다.
- asmNamespace
- String
결과 어셈블리의 네임스페이스입니다.
- asmVersion
- Version
결과 어셈블리의 버전입니다. 이 경우 null형식 라이브러리의 버전이 사용됩니다.
반품
AssemblyBuilder 변환된 형식 라이브러리를 포함하는 개체입니다.
구현
예외
생성된 메타데이터에는 모든 형식이 로드되지 않도록 하는 오류가 있습니다.
예제
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
설명
어셈블리에 대한 강력한 이름을 생성하지 않으려면 동일하지 않는 한 유효 publicKey 합니다 keyPairnullflags.TypeLibImporterFlags.PrimaryInteropAssembly 그렇지 않으면 이러한 매개 변수 중 하나를 지정해야 합니다. 이 publicKey경우 null 공개 키가 keyPair 대상 어셈블리의 매니페스트 메타데이터에 설정되고 어셈블리의 내용에 따라 서명이 생성됩니다. 이 keyPairnull 경우 publicKey 대상 어셈블리의 매니페스트 메타데이터에 설정되며 서명이 생성되지 않습니다. 두 매개 변수를 모두 지정하는 것은 일반적으로 유용하지 않으며 잘못된 서명이 발생할 수 있습니다.
자세한 ITypeLib내용은 MSDN 라이브러리의 기존 설명서를 참조하세요.