J'ai certaines classes définies dans un fichier dll. Ceux-ci sont sous la forme de com api. J'essaie de créer dynamiquement un objet de la classe et de définir une propriété de cet objet.Invoke méthode dynamiquement dans VB.Net
Quand je mis la propriété manuellement, cela fonctionne, mais lorsque je tente d'invoquer la même chose en utilisant la réflexion, il donne l'erreur que
objet ne correspond pas au type de cible.
Après mon code
Private Sub SetObjectValue(ByVal SelectedObject As SAPbobsCOM.BoObjectTypes, ByVal ClassName As String, ByVal FieldName As String, ByVal SetValue As String, ByVal KeyValue As String)
Dim oObject As Object
Dim myAssembly As Reflection.Assembly = Reflection.Assembly.LoadFrom("interop.sapbobscom.dll")
Dim myType As Type = myAssembly.GetType(ClassName)
Dim myMember() As MemberInfo = myType.GetMember(FieldName)
Dim myProperty As PropertyInfo = CType(myMember(0), PropertyInfo)
Dim myMethod As MethodInfo = myProperty.GetSetMethod
oObject = oCompany.GetBusinessObject(SelectedObject)
oObject.GetByKey(KeyValue)
myProperty.SetValue(oObject, CDbl(SetValue), Nothing)
End Sub
Il donne l'erreur lorsque la méthode SetValue est appelée. Au lieu de cela, si j'utilise cela comme suit il fonctionne très bien:
oObject.CreditLimit = 129
oObject.Update
Où CreditLimit est une propriété de la classe donnée, et la mise à jour est une méthode que je dois appeler, après que la valeur est réglée, de sorte que la valeur La base de données sous-jacente est mise à jour
De même GetByKey est utilisé pour récupérer la valeur de l'objet de la base de données sous-jacente, où la valeur du champ de clé primaire doit être transmise.
Puisqu'il existe plusieurs classes et que chaque classe a beaucoup de propriétés différentes, les appeler dynamiquement vous aidera beaucoup.
Merci Rahul Jain
juste essayé de faire ce que casper a suggéré ici. Il donne une erreur en disant - Membre non trouvé. (Exception de HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
Rahul
Son fait. Au lieu de vbSet, j'ai utilisé vbLet et il s'est terminé avec succès.
Merci Rahul
Quel est le type de la propriété CreditLimit? –
Son double. J'ai vérifié avec cela aussi, au lieu de chaîne, si je passe une valeur double, il donne la même erreur. –