none
脚本引擎,COM和.NET互操作问题。如何实现For each List集合 RRS feed

  • 问题

  • 开发脚本引擎,实现接口 IActiveScript,IActiveScriptSite,IDispatch等接口。

    通过AddItemNamed 方法实现项和对象的注册。例如AddItemNamed("Var",object)

    object 包含类的属性和方法,通过COM的GetIDsofNames方法获取类方法的DispID,然后通过Invoke方法执行.NET 对应的方法体。

    现在遇到的问题是。在.net 中有个方法返回的类型是List<T>类型,那么在COM 中不支持此类型。DispID 返回 -4,百度了一下,说是需要实现IEnumerable接口,但是实现了这个接口后还是无法在脚本中使用For each 循环集合。

    提供示例:

    Dim listNames,iName

    listNames=Var.GetListNames()  ---此处的Var是通过接口方法AddItemNamed 加入,GetListNames 是类方法,返回List<string>

    For each iName in listNames  --执行到此处提示“对象不是一个集合”

       MsgBox iName

    Next


    2017年8月14日 1:47