dll ファイルでいくつかのクラスを定義しました。これらは com api の形式です。
クラスの1つのオブジェクトを動的に作成し、そのオブジェクトのプロパティを設定しようとしています。
プロパティを手動で設定すると機能しますが、リフレクションを使用して同じものを呼び出そうとすると、エラーが発生します
オブジェクトがターゲット タイプと一致しません。
以下は私のコードです
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 を使用して、基になるデータベースからオブジェクトの値を取得します。ここでは、主キー フィールドの値を渡す必要があります。
複数のクラスがあり、各クラスには多くの異なるプロパティがあるため、それらを動的に呼び出すと非常に役立ちます。
ありがとうラフル・ジェイン
キャスパーがここで提案したことを試してみました。「メンバーが見つかりません」というエラーが表示されます。(HRESULT からの例外: 0x80020003 (DISP_E_MEMBERNOTFOUND))
ラフル
終わった。vbSet の代わりに vbLet を使用したところ、正常に完了しました。
ありがとうラフル