COM タイプ ライブラリをアセンブリに変換します。
Overloads Public Overridable Function ConvertTypeLibToAssembly( _
ByVal typeLib As Object, _ ByVal asmFileName As String, _ ByVal flags As TypeLibImporterFlags, _ ByVal notifySink As ITypeLibImporterNotifySink, _ ByVal publicKey() As Byte, _ ByVal keyPair As StrongNameKeyPair, _ ByVal asmNamespace As String, _ ByVal asmVersion As Version _) As AssemblyBuilder Implements ITypeLibConverter.ConvertTypeLibToAssembly
[C#]
public virtual AssemblyBuilder ConvertTypeLibToAssembly(objecttypeLib,stringasmFileName,TypeLibImporterFlagsflags,ITypeLibImporterNotifySinknotifySink,byte[] publicKey,StrongNameKeyPairkeyPair,stringasmNamespace,VersionasmVersion);
[C++]
public: virtual AssemblyBuilder* ConvertTypeLibToAssembly(Object* typeLib,String* asmFileName,TypeLibImporterFlagsflags,ITypeLibImporterNotifySink* notifySink,unsigned charpublicKey __gc[],StrongNameKeyPair* keyPair,String* asmNamespace,Version* asmVersion);
[JScript]
public function ConvertTypeLibToAssembly(
typeLib : Object,asmFileName : String,flags : TypeLibImporterFlags,notifySink : ITypeLibImporterNotifySink,publicKey : Byte[],keyPair : StrongNameKeyPair,asmNamespace : String,asmVersion : Version) : AssemblyBuilder;
パラメータ
- typeLib
ITypeLib インターフェイスを実装するオブジェクト。 - asmFileName
結果として得られるアセンブリのファイル名。 - flags
任意の特別な設定を示す TypeLibImporterFlags 値。 - notifySink
呼び出し元によって実装されている ITypeLibImporterNotifySink インターフェイス。 - publicKey
公開キーを保持している byte 配列。 - keyPair
公開暗号キーと秘密暗号キーのペアを保持している StrongNameKeyPair オブジェクト。 - asmNamespace
結果として得られるアセンブリの名前空間。 - asmVersion
結果として得られるアセンブリのバージョン。 null 参照 (Visual Basic では Nothing) の場合は、タイプ ライブラリのバージョンが使用されます。
戻り値
変換後のタイプ ライブラリを保持している AssemblyBuilder オブジェクト。
実装
ITypeLibConverter.ConvertTypeLibToAssembly
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | typeLib が null 参照 (Visual Basic では Nothing) です。
または asmFileName が null 参照 (Nothing) です。 または notifySink が null 参照 (Nothing) です。 |
ArgumentException | asmFileName が空の文字列です。
または asmFileName の長さが MAX_PATH を超えています。 |
InvalidOperationException | flags が PrimaryInteropAssembly ではありません。
または publicKey と keyPair が null 参照 (Visual Basic では Nothing) です。 |
ReflectionTypeLoadException | 生成されたメタデータには、型の読み込みを妨げているエラーがあります。 |
解説
アセンブリの厳密な名前を生成しない場合は、 flags が TypeLibImporterFlags.PrimaryInteropAssembly と等しくない限り、 publicKey と keyPair を null 参照 (Visual Basic では Nothing) にすることができます。それ以外の場合は、少なくとも 1 つのパラメータを指定する必要があります。 publicKey が null 参照 (Nothing) の場合、 keyPair の公開キーは、対象アセンブリのマニフェスト メタデータで設定され、署名はアセンブリの内容に基づいて生成されます。 keyPair が null 参照 (Nothing) の場合、 publicKey は対象アセンブリのマニフェスト メタデータで設定され、署名は生成されません。両方のパラメータを指定できますが、通常は役に立たず、無効な署名が生成される可能性があります。
ITypeLib の詳細については、MSDN ライブラリの既存のドキュメントを参照してください。
使用例
Imports System
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 'Main
End Class 'App
_
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 'ReportEvent
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 'ConversionEventHandler
[C#]
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;
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Runtime::InteropServices;
typedef enum tagREGKIND
{
REGKIND_DEFAULT,
REGKIND_REGISTER,
REGKIND_NONE
} REGKIND;
__gc class ConversionEventHandler : public ITypeLibImporterNotifySink {
public:
void ReportEvent(ImporterEventKind eventKind, int eventCode, String* eventMsg) {
// handle warning event here...
}
Assembly* ResolveRef(Object* typeLib) {
// resolve reference here and return a correct assembly...
return 0;
}
};
[ DllImport(S"oleaut32.dll", CharSet = CharSet::Unicode, PreserveSig = false)]
extern void LoadTypeLibEx(String *strTypeLibName,
REGKIND regkind,
[MarshalAs(UnmanagedType::Interface)] [out] Object ** typeLib);
int main() {
Object* typeLib = new Object();
LoadTypeLibEx(S"SHDocVw.dll", REGKIND_NONE, & typeLib);
if (typeLib == 0) {
Console::WriteLine(S"LoadTypeLibEx failed.");
return 0;
}
TypeLibConverter* converter = new TypeLibConverter();
ConversionEventHandler* eventHandler = new ConversionEventHandler();
AssemblyBuilder* asmb =
converter->ConvertTypeLibToAssembly(
typeLib,
S"ExplorerLib.dll",
(System::Runtime::InteropServices::TypeLibImporterFlags)0,
eventHandler, 0, 0, 0, 0);
asmb->Save(S"ExplorerLib.dll");
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
TypeLibConverter クラス | TypeLibConverter メンバ | System.Runtime.InteropServices 名前空間 | TypeLibConverter.ConvertTypeLibToAssembly オーバーロードの一覧