我想通过反射调用DLL的方法(不能确定是否加载了其他dll)但是参数有问题。
我想要调用的方法是
public void Add(DBTable table, String sField, DBValue value, SQLConditionType type)
the MP-TVSeries project 中的
我试过的是:
// WindowPlugins.GUITVSeries
Assembly MPTVSeries = Assembly.Load("MP-TVSeries");
Type sqlConditionType = MPTVSeries.GetType("WindowPlugins.GUITVSeries.SQLCondition");
Type sqlConditionTypeEnumType = MPTVSeries.GetType("WindowPlugins.GUITVSeries.SQLConditionType");
Type dbEpisode = MPTVSeries.GetType("WindowPlugins.GUITVSeries.DBEpisode");
// SQLCondition sql = new SQLCondition();
object sql = Activator.CreateInstance(sqlConditionType);
// sql.Add(new DBEpisode(), DBEpisode.cFilename, filename, SQLConditionType.Equal);
sqlConditionType.InvokeMember("Add",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,
null,
sql,
new object[] {
Activator.CreateInstance(dbEpisode),
dbEpisode.GetField("cFilename"),
filename,
sqlConditionTypeEnumType.GetField("Equal")
});
但是这会抛出消息
的异常方法“WindowPlugins.GUITVSeries.SQLCondition.Add” 无法找到。
我的猜测是我对参数做错了,但由于我对反射很陌生,所以我无法理解它。
有人请帮忙; - )
答案 0 :(得分:0)
你走得太快了。首先获取sqlConditionType.GetMethod()以获取MethodInfo,这样您就可以确定这不是方法重载解决问题。你传递的参数很臭,特别是 filename 和 sqlConditionTypeEnumType.GetField(“Equal”)。