Le réseau pour les développeurs > Forums - Accueil > Visual C# General > Importing a COM type library and adding a few enums
Poser une questionPoser une question
 

TraitéeImporting a COM type library and adding a few enums

  • jeudi 15 juin 2006 08:23compilator Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    Hello, I'm about to create an assembly which contains a converted COM type library, but I'd like to add a few enums on the way. Can I do that? This is the way I've tried so far:

    Object typeLib;

    LoadTypeLibEx(dllPath, RegKind.RegKind_None, out typeLib);

    FileStream fs = new FileStream(@"key.snk", FileMode.Open, FileAccess.Read);

    StrongNameKeyPair keyPair = new StrongNameKeyPair(fs);

    TypeLibConverter converter = new TypeLibConverter();

    ConversionEventHandler eventHandler = new ConversionEventHandler();

    AssemblyBuilder assembly = converter.ConvertTypeLibToAssembly(typeLib, "NewAssembly.dll", TypeLibImporterFlags.PrimaryInteropAssembly, eventHandler, null, keyPair, "NewNamespace", null);

    ModuleBuilder module = assembly.DefineDynamicModule("TempModule", "NewAssembly.dll", true);

    The problem is that I get an ArgumentException "Duplicate file names." when running DefineDynamicModule.

    How can I add enums to my converted COM type library?

    /Chris

     

Réponses

Toutes les réponses

  • jeudi 15 juin 2006 09:16Mattias SjögrenMVPMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     Traitée

    Have you tried using GetModule instead of DefineDynamicModule?

     

  • jeudi 15 juin 2006 11:42compilator Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    GetModule returns a Module instead of a ModuleBuilder, so its not really what I'm looking for. Also, the docs for AssemblyBuilder says:

    "Some methods on the base class Assembly such as GetModules and GetLoadedModules will not work correctly when called AssemblyBuilder objects. You can load the defined dynamic assembly and call the methods on the loaded assembly. For example, to ensure that resource modules are included in the returned module list, call GetModules on the loaded Assembly object."

    I'm not quite sure what about GetModules thats not working, but I'm not using it :)

    /Chris

     

  • jeudi 15 juin 2006 13:04Mattias SjögrenMVPMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     
     compilator wrote:

    GetModule returns a Module instead of a ModuleBuilder, so its not really what I'm looking for.

    Right, but you may be able to cast it to a ModuleBuilder.

  • jeudi 15 juin 2006 14:10compilator Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     
    It worked. Scary.