Foros del Web » Programación para mayores de 30 ;) » .NET »

pasar parametros a dll mediante reflexion

Estas en el tema de pasar parametros a dll mediante reflexion en el foro de .NET en Foros del Web. Perdon, en el titulo dice reflexion y es Reflection :P Hace unos dias trataba de abrir un formulario que esta coompilado como dll. Ya funciona ...
  #1 (permalink)  
Antiguo 10/10/2008, 15:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
pasar parametros a dll mediante reflexion

Perdon, en el titulo dice reflexion y es Reflection :P

Hace unos dias trataba de abrir un formulario que esta coompilado como dll. Ya funciona perfecto,pero ahroa me topo con otro problema.

En esa dll tengo una variable publica de tipo cadena, a la cual necesito asignarle un valor antes de mostrar el formulario.

El formulario lo cargo con:

Código:
Assembly extAssembly = Assembly.LoadFrom("C:\\dll\\dll\\bin\\Debug\\dll.dll");

Form extForm = (Form)extAssembly.CreateInstance("dll.Form1");
this.AddOwnedForm(extForm);

//Aqui me marca error, por que obviamente un objeto de tipo forma no tiene nada que se llame strVariable, asi que, como le asigno valor?
//extForm.strVariable = "esto es una variable";


extForm.Show();
  #2 (permalink)  
Antiguo 10/10/2008, 15:31
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: pasar parametros a dll mediante reflexion

Revisa PropertyInfo y Type si puedes obtener ambos tu puedes setear la propiedad que necesites.

Assembly extAssembly=Assembly.Load("nruta");
object forma= extAssembly.CreateInstance("dll.Form1");
PropertyInfo propiedad1 = extAssembly.GetType("dll.Form1").GetProperty("srtV ariable");
propiedad1.SetValue(forma, "esto es una variable", null);
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 10/10/2008, 15:52
 
Fecha de Ingreso: octubre-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: pasar parametros a dll mediante reflexion

Y si la clase de la forma que quiero abrir tiene un constructor que recibe parametros, como se haria?
  #4 (permalink)  
Antiguo 10/10/2008, 16:10
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: pasar parametros a dll mediante reflexion

Para un metodo con parametros

Código:
MethodInfo metodo1 = extAssembly.GetType("dll.Form1").GetMethod("nombredelMetodo");
            ParameterInfo []parametrosMetodo=metodo1.GetParameters();
            parametrosMetodo.SetValue("valor", indicedelParametro);
Para obtener los constructores y hacer lo mismo pero uno por uno o el indicado que siga la firma que buscas

Código:
            ConstructorInfo []constructores = extAssembly.GetType("dll.Form1").GetConstructors();
            ParameterInfo []parametrosConstructor1=constructores[0].GetParameters();
            parametrosConstructor1.SetValue("valor", indicedelParametro);
            //...igual que el ejemplo anterior
es solo jugar con reflection un rato para que domines todos esos metodos y propiedades.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 10/10/2008, 17:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: pasar parametros a dll mediante reflexion

Me funciono con property info, pero al momento de asignar el valor me da una excepcion de StackOverflowException

En dll declaro la propiedad asi:

Código:
        public string sistema
        {
            get { return sistema; }
            set { sistema = value; }
        }
Esta bien declarada, no?
  #6 (permalink)  
Antiguo 10/10/2008, 17:52
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: pasar parametros a dll mediante reflexion

no, haces el error clasico del loop la variable privada nombrala no se sistema y la publica Sistema, si no haces eso tienes problemas con la recursion al intentar acceder la misma variable una y otra vez hasta el infinito o tu tamaño de stack

private string sistema;
public string Sistema
{
get{ return sistema;}
set {sistema=value;}
}

solo haz eso y se soluciona.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:00.