Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2011, 14:46   #1
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию использование InvokeMember

Добрый день. Требуется вызвать метод с названием Accept и передать ему переменную ID через InvokeMember.
Вызываю так:
Код:
cr.GetType().InvokeMember("AcceptRequest", BindingFlags.InvokeMethod, null, cr, new object[] { ID });
Но получаю ошибку: Необработанное исключение типа "System.Reflection.TargetInvocation Exception" произошло в mscorlib.dll.
При этом метод вызывается и отрабатывает.
Метод Accept ничего не возвращает, он принимает только string ID. Предположительно это и является причиной ошибки так как метод ничего не возвращает. Подскажите пожалуйста как вызвать метод чтобы вызов через InvokeMember ничего не возвращал.

Последний раз редактировалось Timer32; 13.09.2011 в 16:33.
Timer32 вне форума Ответить с цитированием
Старый 13.09.2011, 15:03   #2
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Type cr = ...;
object instance = Application.CreateInstance(..);

cr.InvokeMember("Accept", BindingFlags.InvokeMethod |BindingFlags.Public |BindingFlags.Static , null, instance, new object[] { ID });
Guy вне форума Ответить с цитированием
Старый 13.09.2011, 15:04   #3
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Если хочется красоту то dynamic
Guy вне форума Ответить с цитированием
Старый 13.09.2011, 16:20   #4
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

У меня не много не так.
Код:
using MSSOAPLib30;
...
SoapClient30 cr = new SoapClient30();
...
cr.GetType().InvokeMember("Accept", BindingFlags.InvokeMethod, null, cr, new object[] { ID });
Без использования GetType() возникае тошибка: ошибка CS1061: "MSSOAPLib30.SoapClient30" не содержит определения для "InvokeMember" и не был найден метод расширения "InvokeMember", принимающий тип "MSSOAPLib30.SoapClient30" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
И не понял что здесь указывать object instance = Application.CreateInstance(..);
Timer32 вне форума Ответить с цитированием
Старый 13.09.2011, 16:28   #5
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Не понел.
Я думал в cr у нас СОМ объект созданый через инстанс, и тебе нада в нем вызвать метод. SoapClient30 классе нету метода Accept ? И откуда уверенность что он там есть. Возможно требуется SoapClient10 либо SoapClient какой нить где есть этот метод.
Guy вне форума Ответить с цитированием
Старый 13.09.2011, 16:31   #6
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

Извеняюсь перепутал метод AcceptRequest
Timer32 вне форума Ответить с цитированием
Старый 13.09.2011, 16:35   #7
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Ну вот. Все так просто оказалось
Guy вне форума Ответить с цитированием
Старый 13.09.2011, 16:40   #8
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

Не понял. Ошибка всеровно возникает.
при
Код:
cr.GetType().InvokeMember("AcceptRequest", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, cr, new object[1] { ID });
Timer32 вне форума Ответить с цитированием
Старый 13.09.2011, 16:42   #9
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

А почему не так

SoapClient30 cr = new SoapClient30();
cr.AcceptRequest(ID)

Иначе нада так
cr.GetType().InvokeMember("AcceptRe quest", BindingFlags.InvokeMethod | BindingFlags.Public, null, cr, new object[1] { ID });
Guy вне форума Ответить с цитированием
Старый 13.09.2011, 16:52   #10
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

Вызывать через cr.AcceptRequest(ID) нельзя.
А так cr.GetType().InvokeMember("AcceptRe quest", BindingFlags.InvokeMethod | BindingFlags.Public, null, cr, new object[1] { ID });
"System.Reflection.TargetInvocation Exception".
Timer32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование WNetAddConnection2 Lokos Работа с сетью в Delphi 2 27.12.2013 09:32
Использование (...) в с++ Byurrer Общие вопросы C/C++ 12 06.04.2011 23:04
Использование Indirect cerberochek Microsoft Office Excel 3 06.09.2010 17:29
Использование idIRC Ням Общие вопросы Delphi 0 04.09.2010 15:25
Использование while и while do prikolist Общие вопросы C/C++ 20 06.04.2009 18:40