次の方法で共有


TypeLibConverter.ConvertTypeLibToAssembly メソッド (Object, String, TypeLibImporterFlags, ITypeLibImporterNotifySink, Byte , StrongNameKeyPair, String, Version)

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 ではありません。

または

publicKeykeyPair が null 参照 (Visual Basic では Nothing) です。

ReflectionTypeLoadException 生成されたメタデータには、型の読み込みを妨げているエラーがあります。

解説

アセンブリの厳密な名前を生成しない場合は、 flagsTypeLibImporterFlags.PrimaryInteropAssembly と等しくない限り、 publicKeykeyPair を 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 オーバーロードの一覧