Я пытаюсь использовать позднее связывание для подключения к API-интерфейсу автоматизации COM, предоставляемому программой Amibroker, используя проект C# WinForms. До сих пор мне удавалось подключиться ко всему в API, кроме одного элемента, который, как мне кажется, является «параметризованным свойством», основанным на обширном поиске в Google.
Вот как выглядит спецификация API согласно документации (полная версия здесь: http://www.amibroker.com/guide/objects.html):
Property Filter(ByVal nType As Integer, ByVal pszCategory As String) As Long [r/w]
Фрагмент javascript для обновления значения выглядит следующим образом:
AB = new ActiveXObject("Broker.Application");
AA = AB.Analysis;
AA.Filter( 0, "market" ) = 0;
Используя следующий код позднего связывания C#, я могу получить значение свойства, но я не могу понять, как установить значение:
object[] parameter = new object[2];
parameter[0] = Number;
parameter[1] = Type;
object filters = _analysis.GetType().InvokeMember("Filter", BindingFlags.GetProperty, null, _analysis, parameter);
До сих пор я пробовал:
- используя BindingFlags.SetProperty, BindingFlags.SetField
- приведение возвращаемого объекта к объекту PropertyInfo и попытка обновить значение с его помощью
- добавление дополнительного объекта, содержащего значение, к объекту параметров
- различные другие вещи в качестве последних усилий
Из того, что я вижу, это должно быть прямолинейно, но я нахожу позднее связывание в С# в лучшем случае громоздким. Свойство выглядит для меня как вызов метода, что меня сбивает с толку. Как можно присвоить значение методу и как для него будет выглядеть прототип кода C# с поздним связыванием?
Надеюсь, это объясняет это достаточно хорошо, но не стесняйтесь спрашивать, оставил ли я что-то неясным. Заранее благодарю за любую помощь!
Даниэль