Invoke-Methode dynamisch in VB.Net
Habe ich einige Klassen definiert, die in einer dll-Datei. Diese sind in form von com-api.
Ich versuche zu schaffen, ein Objekt einer Klasse dynamisch und als Einstellung einer Eigenschaft des Objekts.
Wenn ich die Eigenschaft manuell, funktioniert es, aber wenn ich versuche, rufen Sie das gleiche mit der spiegelung, es gibt den Fehler, dass
Objekt nicht mit target.
Folgendes ist mein 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
Gibt es den Fehler bei der Methode SetValue aufgerufen wird. Stattdessen, wenn ich das wie folgt funktioniert es:
oObject.CreditLimit = 129
oObject.Update
Wo CreditLimit ist eine Eigenschaft, die der gegebenen Klasse, und update ist eine Methode welche ich aufrufen, nachdem der Wert festgelegt ist, so dass der Wert in der zugrunde liegenden Datenbank wird aktualisiert.
Ähnlich GetByKey wird verwendet, um den Wert des Objekts aus der zugrunde liegenden Datenbank, wo der Wert des Primärschlüssel-Feld übergeben werden.
Da gibt es mehrere Klassen und jede Klasse hat viele verschiedene Eigenschaften, deshalb ruft Sie dynamisch wird helfen, eine Menge.
Dank
Rahul Jain
Gerade versucht zu tun, was casper hat vorgeschlagen hier. Es gibt eine Fehlermeldung - Mitglied nicht gefunden. (Ausnahme von HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
Rahul
Fertig. Statt vbSet, die ich verwendet, vbLet und es erfolgreich abgeschlossen.
Dank
Rahul
- Was ist der Typ von dem CreditLimit Eigenschaft?
- Sein double. Ich habe überprüft, dass auch anstelle der Zeichenfolge, wenn ich vorbeigehe, einen double-Wert, es gibt den gleichen Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bin ich irgendwie neugierig, warum Sie dies nicht tun, da VB wird alles tun es für Sie. Sie haben einfach zu erklären als Typ object und dann anrufen, oder verwenden Sie eine option (ich glaube, es ist strenge?) die verhindert, dass Sie aus der Vermietung der compiler Strahlen der Reflexion-code für spät gebundene Aufrufe?
Wenn Sie brauchen, um einen parameter, Sie sollten in der Lage sein zu verwenden CallByName sowie: