我在 dll 文件中定义了一些类。这些都是com api的形式。
我正在尝试动态创建一个类的对象,而不是设置该对象的某些属性。
当我手动设置属性时,它可以工作,但是当我尝试使用反射调用相同的属性时,它会给出错误
对象与目标类型不匹配。
以下是我的代码
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
调用 SetValue 方法时会出现错误。相反,如果我像下面这样使用它,它可以正常工作:
oObject.CreditLimit = 129
oObject.Update
其中 CreditLimit 是给定类的属性,而 update 是我必须在设置值后调用的方法,以便更新基础数据库中的值。
类似地,GetByKey 用于从底层数据库中检索对象的值,其中必须传递主键字段的值。
由于有多个类,每个类都有很多不同的属性,因此动态调用它们会有很大帮助。
谢谢拉胡尔耆那教
刚刚尝试做 casper 在这里建议的事情。它给出了一个错误消息 - 找不到成员。(来自 HRESULT 的异常:0x80020003 (DISP_E_MEMBERNOTFOUND))
拉胡尔
完成。我使用 vbLet 而不是 vbSet,它成功完成。
谢谢拉胡尔