我无法掌握各种“Init”、“Accumulate”... 方法的工作原理,以便能够从 VB.Net 代码调用位于 DLL 中的方法。
假设要调用的方法具有以下签名:
public double ComputeMeanPosition(ref SortedList<DateTime, double> posByTime)
请您指出一个使用方法的实际示例,或者简单地给我一些提示,说明如何将参数实际传递给方法,调用它并获取结果?
@Olivier Jacot-Descombes:我肯定会在类名前加上命名空间名称,但无法访问该对象。事实上,我很惊讶您的建议不涉及以下方法,通过对加载的 DLL 的内省显示:
Type: MyClassName
Method: Void Init()
Method: Void Accumulate(System.Data.SqlTypes.SqlDouble, System.Data.SqlTypes.SqlDateTime, System.Data.SqlTypes.SqlBoolean)
Method: Void Merge(MyClassName)
Method: System.Data.SqlTypes.SqlDouble Terminate()
Method: Void Write(System.IO.BinaryWriter)
Method: Void Read(System.IO.BinaryReader)
Method: Boolean Equals(System.Object)
Method: Int32 GetHashCode()
Method: System.String ToString()
Method: System.Type GetType()
编辑
事实上,我有一个类似于下面的代码,它成功地检查了 DLL 并从中获取了几种类型和方法,为我想调用的方法提供了以下结果。
这是代码
For Each oneModule As Reflection.Module In useAssembly.GetLoadedModules() Console.WriteLine(" - " & oneModule.Name) For Each oneType As System.Type In oneModule.GetTypes() Console.WriteLine(" Type: " & oneType.Name) For Each oneField As Reflection.FieldInfo In oneType.GetFields() Console.WriteLine(" Field: " & oneField.ToString()) Next oneField For Each oneMethod As Reflection.MethodInfo In oneType.GetMethods() Console.WriteLine(" Method: " & oneMethod.ToString()) [[ ADD "Invoke" here ?]] Next oneMethod Next oneType Next oneModule
最后,似乎 [[...]] 在应该调用 Invoke 方法以调用我选择的方法的地方,但这就是我卡住的地方......我需要构建调用它之前的对象?我应该如何传递参数?如何得到结果?