【发布时间】:2011-02-17 20:43:00
【问题描述】:
我正在尝试使用后期绑定连接到一个名为 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 sn-p 如下所示:
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# 代码的原型是什么样的?
希望这可以很好地解释它,但请随时询问我是否有任何不清楚的地方。提前感谢您的帮助!
丹尼尔
【问题讨论】:
-
@optim:您应该显示对 SetProperty 的调用,因为它很可能是使用它的调用的变体。
标签: c# com parameters properties late-binding