我正在尝试使用后期绑定连接到由名为 Amibroker 的程序提供的 COM 自动化 API,使用 C# WinForms 项目。到目前为止,我已经能够连接到 API 中的所有内容,除了一个项目,我认为这是基于广泛谷歌搜索的“参数化属性”。
根据文档,这是 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# 中的后期绑定充其量是麻烦的。该属性看起来像是对我的方法调用,这让我很失望。如何为方法赋值,后期绑定 C# 代码的原型会是什么样子?
希望这可以很好地解释它,但请随时询问我是否有任何不清楚的地方。提前感谢您的帮助!
丹尼尔