InvokeMember в c # с «отраженными» параметрами - PullRequest
0 голосов
/ 10 ноября 2010

Я хочу вызвать метод DLL через отражение (не могу быть уверен, что загружена другая dll), но у меня проблемы с параметрами.

Метод, который я хочу вызвать:

public void Add(DBTable table, String sField, DBValue value, SQLConditionType type)

в проекте MP-TVSeries

Я пытался сделать следующее:

        // 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".

Я предполагаю, что я что-то не так с параметрами, но я совершенно новыйк размышлению, я не могу обойти это.

Кто-то, пожалуйста, помогите; -)

1 Ответ

0 голосов
/ 10 ноября 2010

Ты едешь слишком быстро.Сначала получите sqlConditionType.GetMethod (), чтобы получить MethodInfo, чтобы вы могли быть уверены, что это не проблема разрешения перегрузки метода.Передаваемые вами аргументы вонючие, особенно filename и sqlConditionTypeEnumType.GetField ("Equal") .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...