none
Recuperar Metodos de Dll

    Question

  • Muy buenas foro...

    Me gustaria saber si hay alguna manera de recuperar los métodos que tiene una dll externa, es decir una dll cualquiera...

    Gracias de antemano...

    Salu3 y suerte!!
    [Fernando Nicolás Santana Bueno] || {Analista Programador (VB.net & ASP.NET, empezando con C# y probando con JAVA...)} || Santo Domingo, República Dominicana
    Tuesday, December 01, 2009 3:02 PM

Answers

  • Hola Nicolás,

    puedes utilizar Reflexión:

    te dejo este artículo de la MSDN Magazine donde se expone un ejemplo de uso:

    http://msdn.microsoft.com/en-us/magazine/cc163408.aspx

    o la documentación en la MSDN:

    http://msdn.microsoft.com/en-us/library/f7ykdhsy.aspx


    Básicamente se trata de cargar la meta-información de la dll para obtener información sobre su contenido, y una vez tienes esa información, puedes utilizarla para hacer uso tanto de las clases como de los métodos definidos dentro del assembly (dll).

    Deberás utilizar la clase Assembly, Type, ConstructorInfo, MethodInfo, etc...


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    Tuesday, December 01, 2009 3:12 PM
  • Busca todo lo que tenga que ver con System.Reflection

    Aca tienes algo de información


    Saludos

    Sparow
    Tuesday, December 01, 2009 3:14 PM
  • hola

    si la idea es solo entender o sea analizar la clases porque no has usado la aplicacion:

    .NET Reflector

    si te registras puedes descargar un version de uso libre

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Tuesday, December 01, 2009 4:35 PM
  • Hola de nuevo,

    si te fijas, lo que hace este código es búscar en la dll la clase system.collections.Hastable:

    Type hashTableType = ass.GetType("System.Collections.Hashtable");  --> Con esto, cargamos el tipo System.Collections.Hastable que hay definido en la dll

    Ahora paso a instanciar un objeto de este tipo. Para ello necesitamos el constructor:

    ConstructorInfo cinfo= hashTableType.GetConstructor(new Type[] { }); --> Yo sé que hay un constructor sin parámetros, por eso paso un array vacío, si no sabes qué constructores hay, puedes usar el método hashTableType.GetConstructors. Este devuelve un array de constructorinfo con todos los constructores de los que dispone esa clase.

    Para obtener la lista de métodos que tiene la clase Hashtable, haríamos lo mismo:

    MethodInfo[] metodos= hashTableType.GetMethods();

    Ahora puedes recorrer el array para ver todos los métodos que tiene esta clase. Cada MethodInfo tiene una lista con los parámetros que necesita este método.



    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    Tuesday, December 01, 2009 4:35 PM

All replies

  • Hola Nicolás,

    puedes utilizar Reflexión:

    te dejo este artículo de la MSDN Magazine donde se expone un ejemplo de uso:

    http://msdn.microsoft.com/en-us/magazine/cc163408.aspx

    o la documentación en la MSDN:

    http://msdn.microsoft.com/en-us/library/f7ykdhsy.aspx


    Básicamente se trata de cargar la meta-información de la dll para obtener información sobre su contenido, y una vez tienes esa información, puedes utilizarla para hacer uso tanto de las clases como de los métodos definidos dentro del assembly (dll).

    Deberás utilizar la clase Assembly, Type, ConstructorInfo, MethodInfo, etc...


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    Tuesday, December 01, 2009 3:12 PM
  • Busca todo lo que tenga que ver con System.Reflection

    Aca tienes algo de información


    Saludos

    Sparow
    Tuesday, December 01, 2009 3:14 PM
  • Muchas gracias a los 2 por sus respuestas!!

    Salu3 y suerte!!

    [Fernando Nicolás Santana Bueno] || {Analista Programador (VB.net & ASP.NET, empezando con C# y probando con JAVA...)} || Santo Domingo, República Dominicana
    Tuesday, December 01, 2009 3:46 PM
  • Hola de nuevo,

    te paso este ejemplo que acabo de crear por si te sirve:

    using System;
    using System.Reflection;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Assembly ass = Assembly.LoadFrom(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll");
    
                Type hashTableType = ass.GetType("System.Collections.Hashtable");
    
                if (hashTableType != null)
                {
                    ConstructorInfo cinfo= hashTableType.GetConstructor(new Type[] { });
    
                    Object hashtable =cinfo.Invoke(new object[]{});
    
                    MethodInfo addMethod=hashTableType.GetMethod("Add");
                    ParameterInfo[] parameters=addMethod.GetParameters();
    
                    string key = "clave";
                    string value = "valor";
    
                    addMethod.Invoke(hashtable, new object[] { key, value });
                }
    
            }
        }
    }

    Lo que hace es crear un objeto Hashtable pero cargándolo desde el assembly mscorlib.dll (que es donde se encuentra definido). construyo un objeto de este tipo y le añado un elemento. Un poco para que veas cómo va el tema.

     


    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    Tuesday, December 01, 2009 4:05 PM
  • Buenas Javier.

    Solo para ver si voy entendiendo un poco la cosa...

    Ese ejemplo que me pusiste... ¿Es para poder utilizar los métodos de un DLL o para añadirle "dinámicamente" un método al DLL?.
    Todavia sigo leyendo sobre el tema, pero lo que me interesaria seria poder ver cuales son los metodos que contiene una DLL para entender como funciona...

    Salu3 y suerte...
    [Fernando Nicolás Santana Bueno] || {Analista Programador (VB.net & ASP.NET, empezando con C# y probando con JAVA...)} || Santo Domingo, República Dominicana
    Tuesday, December 01, 2009 4:30 PM
  • hola

    si la idea es solo entender o sea analizar la clases porque no has usado la aplicacion:

    .NET Reflector

    si te registras puedes descargar un version de uso libre

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Tuesday, December 01, 2009 4:35 PM
  • Hola de nuevo,

    si te fijas, lo que hace este código es búscar en la dll la clase system.collections.Hastable:

    Type hashTableType = ass.GetType("System.Collections.Hashtable");  --> Con esto, cargamos el tipo System.Collections.Hastable que hay definido en la dll

    Ahora paso a instanciar un objeto de este tipo. Para ello necesitamos el constructor:

    ConstructorInfo cinfo= hashTableType.GetConstructor(new Type[] { }); --> Yo sé que hay un constructor sin parámetros, por eso paso un array vacío, si no sabes qué constructores hay, puedes usar el método hashTableType.GetConstructors. Este devuelve un array de constructorinfo con todos los constructores de los que dispone esa clase.

    Para obtener la lista de métodos que tiene la clase Hashtable, haríamos lo mismo:

    MethodInfo[] metodos= hashTableType.GetMethods();

    Ahora puedes recorrer el array para ver todos los métodos que tiene esta clase. Cada MethodInfo tiene una lista con los parámetros que necesita este método.



    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    Tuesday, December 01, 2009 4:35 PM
  • Muchas gracias por sus respuestas y dedicación. Son de gran ayuda!!

    Salu3 y suerte!!

    [Fernando Nicolás Santana Bueno] || {Analista Programador (VB.net & ASP.NET, empezando con C# y probando con JAVA...)} || Santo Domingo, República Dominicana
    Tuesday, December 01, 2009 4:43 PM