Asignar valor a una propiedad

17/01/2005 - 16:28 por Asier | Informe spam
Hola grupo,

Estoy usando reflection para asignar un valor a una propiedad de un DLL
externa. El código que uso es:

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click

Dim kk1 As [Assembly]

kk1 = [Assembly].LoadFrom("C:\Pruebas Reflection\dllAsier\bin\dllAsier.dll")

Dim t As Type = kk1.GetType("dllAsier.ClassHola")

Dim myProp As PropertyInfo = t.GetProperty("pEdad")

myProp.SetValue(t, "10", Nothing)

End Sub

y tengo en dllAsier.dll mi propiedad de la siguiente manera:

Public Class ClassHola

Public Property pEdad() As Integer

Get

Return m_pEdad

End Get

Set(ByVal Valor As Integer)

m_pEdad = Valor

End Set

End Property

End Class

A la propiedad accede bien (puedo leer sus atributos, etc), pero al
ejecutar la sentencia SetValue me da el error:

Excepción no controlada del tipo 'System.Reflection.TargetException' en
mscorlib.dll

Información adicional: El objeto no coincide con el tipo de destino.

¿que puede ser? gracias por vuestra ayuda

Asier

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
17/01/2005 - 17:00 | Informe spam
myProp.SetValue(t, "10", Nothing)


El problema es que tu propiedad es Integer y le asignas un String.

Prueba con:
myProp.SetValue(t, 10, Nothing)

Como usas Reflection, estas a un nivel mas bajo y no hay conversiones
automaticas de tipos de dato.

Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu



"Asier" escribió en el mensaje
news:%23pWbdjK$
Hola grupo,

Estoy usando reflection para asignar un valor a una propiedad de un


DLL
externa. El código que uso es:

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click

Dim kk1 As [Assembly]

kk1 = [Assembly].LoadFrom("C:\Pruebas


Reflection\dllAsier\bin\dllAsier.dll")

Dim t As Type = kk1.GetType("dllAsier.ClassHola")

Dim myProp As PropertyInfo = t.GetProperty("pEdad")

myProp.SetValue(t, "10", Nothing)

End Sub

y tengo en dllAsier.dll mi propiedad de la siguiente manera:

Public Class ClassHola

Public Property pEdad() As Integer

Get

Return m_pEdad

End Get

Set(ByVal Valor As Integer)

m_pEdad = Valor

End Set

End Property

End Class

A la propiedad accede bien (puedo leer sus atributos, etc), pero al
ejecutar la sentencia SetValue me da el error:

Excepción no controlada del tipo 'System.Reflection.TargetException' en
mscorlib.dll

Información adicional: El objeto no coincide con el tipo de destino.

¿que puede ser? gracias por vuestra ayuda

Asier









Respuesta Responder a este mensaje
#2 Asier
17/01/2005 - 17:20 | Informe spam
Gracias por contestar, pero sigue sin funcionar.


"Pedro Luna Montalvo, MVP" escribió en
el mensaje news:OtQqo1K$

> myProp.SetValue(t, "10", Nothing)
El problema es que tu propiedad es Integer y le asignas un String.

Prueba con:
myProp.SetValue(t, 10, Nothing)

Como usas Reflection, estas a un nivel mas bajo y no hay conversiones
automaticas de tipos de dato.

Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu



"Asier" escribió en el mensaje
news:%23pWbdjK$
> Hola grupo,
>
> Estoy usando reflection para asignar un valor a una propiedad de un
DLL
> externa. El código que uso es:
>
> Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles Button6.Click
>
> Dim kk1 As [Assembly]
>
> kk1 = [Assembly].LoadFrom("C:\Pruebas
Reflection\dllAsier\bin\dllAsier.dll")
>
> Dim t As Type = kk1.GetType("dllAsier.ClassHola")
>
> Dim myProp As PropertyInfo = t.GetProperty("pEdad")
>
> myProp.SetValue(t, "10", Nothing)
>
> End Sub
>
> y tengo en dllAsier.dll mi propiedad de la siguiente manera:
>
> Public Class ClassHola
>
> Public Property pEdad() As Integer
>
> Get
>
> Return m_pEdad
>
> End Get
>
> Set(ByVal Valor As Integer)
>
> m_pEdad = Valor
>
> End Set
>
> End Property
>
> End Class
>
> A la propiedad accede bien (puedo leer sus atributos, etc), pero al
> ejecutar la sentencia SetValue me da el error:
>
> Excepción no controlada del tipo 'System.Reflection.TargetException' en
> mscorlib.dll
>
> Información adicional: El objeto no coincide con el tipo de destino.
>
> ¿que puede ser? gracias por vuestra ayuda
>
> Asier
>
>
>
>
>
>
>
>
>



Respuesta Responder a este mensaje
#3 Pedro Luna Montalvo, MVP
17/01/2005 - 17:32 | Informe spam
Ok, no me habia fijado bien en que el error del codigo es que no has creado
una instancia del objeto al cual le vas a establecer la propiedad.

Dim t As Type = kk1.GetType("dllAsier.ClassHola") 'Esto te recupera
informacion del tipo, no un objeto de ese tipo

Dim myProp As PropertyInfo = t.GetProperty("pEdad") ' Obtienes informacion
de la propiedad

'Aqui debemos crear el objeto usando la informacion del tipo
Dim oObjeto As Object = Activator.CreateInstance(t)

' Luego podemos manipular el objeto, usando sus propiedades o invocando sus
metodos
myProp.SetValue(oObjeto, "10", Nothing)



Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu


"Asier" escribió en el mensaje
news:uFyH3AL$
Gracias por contestar, pero sigue sin funcionar.


"Pedro Luna Montalvo, MVP" escribió


en
el mensaje news:OtQqo1K$
>
> > myProp.SetValue(t, "10", Nothing)
> El problema es que tu propiedad es Integer y le asignas un String.
>
> Prueba con:
> myProp.SetValue(t, 10, Nothing)
>
> Como usas Reflection, estas a un nivel mas bajo y no hay conversiones
> automaticas de tipos de dato.
>
> Saludos
> Pedro Luna, [MVP VB.NET]
> Gye, Ecu
>
>
>
> "Asier" escribió en el mensaje
> news:%23pWbdjK$
> > Hola grupo,
> >
> > Estoy usando reflection para asignar un valor a una propiedad de


un
> DLL
> > externa. El código que uso es:
> >
> > Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
> > System.EventArgs) Handles Button6.Click
> >
> > Dim kk1 As [Assembly]
> >
> > kk1 = [Assembly].LoadFrom("C:\Pruebas
> Reflection\dllAsier\bin\dllAsier.dll")
> >
> > Dim t As Type = kk1.GetType("dllAsier.ClassHola")
> >
> > Dim myProp As PropertyInfo = t.GetProperty("pEdad")
> >
> > myProp.SetValue(t, "10", Nothing)
> >
> > End Sub
> >
> > y tengo en dllAsier.dll mi propiedad de la siguiente manera:
> >
> > Public Class ClassHola
> >
> > Public Property pEdad() As Integer
> >
> > Get
> >
> > Return m_pEdad
> >
> > End Get
> >
> > Set(ByVal Valor As Integer)
> >
> > m_pEdad = Valor
> >
> > End Set
> >
> > End Property
> >
> > End Class
> >
> > A la propiedad accede bien (puedo leer sus atributos, etc), pero


al
> > ejecutar la sentencia SetValue me da el error:
> >
> > Excepción no controlada del tipo 'System.Reflection.TargetException'


en
> > mscorlib.dll
> >
> > Información adicional: El objeto no coincide con el tipo de destino.
> >
> > ¿que puede ser? gracias por vuestra ayuda
> >
> > Asier
> >
> >
> >
> >
> >
> >
> >
> >
> >
>
>
>



Respuesta Responder a este mensaje
#4 Asier
17/01/2005 - 18:22 | Informe spam
Gracias Pedro, ahora si funciona.
Saludos,

"Pedro Luna Montalvo, MVP" escribió en
el mensaje news:OlCOfHL$
Ok, no me habia fijado bien en que el error del codigo es que no has


creado
una instancia del objeto al cual le vas a establecer la propiedad.

Dim t As Type = kk1.GetType("dllAsier.ClassHola") 'Esto te recupera
informacion del tipo, no un objeto de ese tipo

Dim myProp As PropertyInfo = t.GetProperty("pEdad") ' Obtienes informacion
de la propiedad

'Aqui debemos crear el objeto usando la informacion del tipo
Dim oObjeto As Object = Activator.CreateInstance(t)

' Luego podemos manipular el objeto, usando sus propiedades o invocando


sus
metodos
myProp.SetValue(oObjeto, "10", Nothing)



Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu


"Asier" escribió en el mensaje
news:uFyH3AL$
> Gracias por contestar, pero sigue sin funcionar.
>
>
> "Pedro Luna Montalvo, MVP"


escribió
en
> el mensaje news:OtQqo1K$
> >
> > > myProp.SetValue(t, "10", Nothing)
> > El problema es que tu propiedad es Integer y le asignas un String.
> >
> > Prueba con:
> > myProp.SetValue(t, 10, Nothing)
> >
> > Como usas Reflection, estas a un nivel mas bajo y no hay conversiones
> > automaticas de tipos de dato.
> >
> > Saludos
> > Pedro Luna, [MVP VB.NET]
> > Gye, Ecu
> >
> >
> >
> > "Asier" escribió en el mensaje
> > news:%23pWbdjK$
> > > Hola grupo,
> > >
> > > Estoy usando reflection para asignar un valor a una propiedad de
un
> > DLL
> > > externa. El código que uso es:
> > >
> > > Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
> > > System.EventArgs) Handles Button6.Click
> > >
> > > Dim kk1 As [Assembly]
> > >
> > > kk1 = [Assembly].LoadFrom("C:\Pruebas
> > Reflection\dllAsier\bin\dllAsier.dll")
> > >
> > > Dim t As Type = kk1.GetType("dllAsier.ClassHola")
> > >
> > > Dim myProp As PropertyInfo = t.GetProperty("pEdad")
> > >
> > > myProp.SetValue(t, "10", Nothing)
> > >
> > > End Sub
> > >
> > > y tengo en dllAsier.dll mi propiedad de la siguiente manera:
> > >
> > > Public Class ClassHola
> > >
> > > Public Property pEdad() As Integer
> > >
> > > Get
> > >
> > > Return m_pEdad
> > >
> > > End Get
> > >
> > > Set(ByVal Valor As Integer)
> > >
> > > m_pEdad = Valor
> > >
> > > End Set
> > >
> > > End Property
> > >
> > > End Class
> > >
> > > A la propiedad accede bien (puedo leer sus atributos, etc), pero
al
> > > ejecutar la sentencia SetValue me da el error:
> > >
> > > Excepción no controlada del tipo 'System.Reflection.TargetException'
en
> > > mscorlib.dll
> > >
> > > Información adicional: El objeto no coincide con el tipo de destino.
> > >
> > > ¿que puede ser? gracias por vuestra ayuda
> > >
> > > Asier
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> >
> >
> >
>
>
>



Respuesta Responder a este mensaje
#5 news.microsoft.com
18/01/2005 - 21:22 | Informe spam
La propiedad es numerica, y estas pasando un string.

Tenes que pasar myProp.SetValue(t, 10, Nothing) -- el 10 sin las
comillas

Un abrazo

Alvarez Arigos Roberto Miguel
Analista Superior de Sistemas

"Asier" escribió en el mensaje
news:%23pWbdjK$
Hola grupo,

Estoy usando reflection para asignar un valor a una propiedad de un


DLL
externa. El código que uso es:

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click

Dim kk1 As [Assembly]

kk1 = [Assembly].LoadFrom("C:\Pruebas


Reflection\dllAsier\bin\dllAsier.dll")

Dim t As Type = kk1.GetType("dllAsier.ClassHola")

Dim myProp As PropertyInfo = t.GetProperty("pEdad")

myProp.SetValue(t, "10", Nothing)

End Sub

y tengo en dllAsier.dll mi propiedad de la siguiente manera:

Public Class ClassHola

Public Property pEdad() As Integer

Get

Return m_pEdad

End Get

Set(ByVal Valor As Integer)

m_pEdad = Valor

End Set

End Property

End Class

A la propiedad accede bien (puedo leer sus atributos, etc), pero al
ejecutar la sentencia SetValue me da el error:

Excepción no controlada del tipo 'System.Reflection.TargetException' en
mscorlib.dll

Información adicional: El objeto no coincide con el tipo de destino.

¿que puede ser? gracias por vuestra ayuda

Asier









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida