如何在动态 COM 对象上设置函数 属性?
How do I set a function property on a dynamic COM object?
我正在查看 Amibroker 在 VBScript 和 JS 中的 OLE 文档示例,试图将其转换为 C# 代码:
http://www.amibroker.de/guide/objects.html
里面写着:
Filter( 0, "index" ) = 1; // include only indices
Filter( 1, "market" ) = 2; // exclude 2nd market
我有一个我构建的 C# 动态对象,我可以找到并调用 Filter() 函数,但我不知道如何在函数调用后设置值,因为那不是有效的 C# 语法。
这是 C# 代码:
var type = Type.GetTypeFromProgID("Broker.Application");
dynamic ab = Activator.CreateInstance(type);
ab.Analysis.Filter(0, "market") = 2; // This is obviously not compiling
当我调用 ab.Analysis.Filter(0, "market") 时,它只是 returns 当前设置的一个整数。是以某种方式使用反射的答案吗?我还没有尝试走那条路,想知道是否有更简单的解决方案。
您找到的代码片段是 jscript,而不是 VBScript。它不是一个函数 属性,它是一个 indexed 属性。 VB.NET 很好地支持他们。但 C# 团队不喜欢它们,只允许一个索引 属性 用于 class,索引器 (this[])。根据大众需求,他们在版本 4 中添加了支持。仅用于 COM 互操作。你用的是哪个
就像索引器一样,您对索引属性使用方括号:
AA.Filter[0, "market"] = 1;
dynamic 也应该支持。显式调用 setter 函数是另一种方式,AA.set_Filter(0, "market", 1).
请注意,添加对类型库的引用后,编写此代码的时间会大大。这会点亮 IntelliSense 和红色波浪线。
我正在查看 Amibroker 在 VBScript 和 JS 中的 OLE 文档示例,试图将其转换为 C# 代码: http://www.amibroker.de/guide/objects.html
里面写着:
Filter( 0, "index" ) = 1; // include only indices
Filter( 1, "market" ) = 2; // exclude 2nd market
我有一个我构建的 C# 动态对象,我可以找到并调用 Filter() 函数,但我不知道如何在函数调用后设置值,因为那不是有效的 C# 语法。
这是 C# 代码:
var type = Type.GetTypeFromProgID("Broker.Application");
dynamic ab = Activator.CreateInstance(type);
ab.Analysis.Filter(0, "market") = 2; // This is obviously not compiling
当我调用 ab.Analysis.Filter(0, "market") 时,它只是 returns 当前设置的一个整数。是以某种方式使用反射的答案吗?我还没有尝试走那条路,想知道是否有更简单的解决方案。
您找到的代码片段是 jscript,而不是 VBScript。它不是一个函数 属性,它是一个 indexed 属性。 VB.NET 很好地支持他们。但 C# 团队不喜欢它们,只允许一个索引 属性 用于 class,索引器 (this[])。根据大众需求,他们在版本 4 中添加了支持。仅用于 COM 互操作。你用的是哪个
就像索引器一样,您对索引属性使用方括号:
AA.Filter[0, "market"] = 1;
dynamic 也应该支持。显式调用 setter 函数是另一种方式,AA.set_Filter(0, "market", 1).
请注意,添加对类型库的引用后,编写此代码的时间会大大。这会点亮 IntelliSense 和红色波浪线。