代码之家  ›  专栏  ›  技术社区  ›  vanja.

使用COM互操作将数组从JS返回到C

  •  5
  • vanja.  · 技术社区  · 16 年前

    我将通过com interop和webbrowser wpf控件将javascript代码中的一些数据返回到C代码中。我已经成功返回了javascript中类似的数据:

    var result = new Array(); 
    result[0] = cbCamera.selectedItem; 
    result[1] = cbMicrophone.selectedItem;
    

    现在我得到了C中的对象结果,它看起来是这样的:

    result.GetType(); 
    {Name = "__ComObject" FullName = "System.__ComObject"}
    

    如何获取此ComObject中的数组中包含的javascript字符串?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Fraser    15 年前

    要查找rutime可调用包装(system.uComObject)中包含的对象的底层类型,可以使用refection。然后,您将能够根据此信息创建或转换为托管类型。

    例如;

    string type = (string)result.GetType().InvokeMember("getType",
    BindingFlags.InvokeMethod, null, result, null);
    

    或者,可以使用InvokeMember来检索值。例如,可以调用valueof方法将数组转换为可能的最有意义的原语值,或者调用toString将数组转换为csv字符串。

    string result = (string)result.GetType().InvokeMember("toString",
    BindingFlags.InvokeMethod, null, result, null);
    string[] jsArray = result.Split(',');
    // c# jsArray[n] = js result[n] 
    

    编辑:在C 4.0中,第三种方法是使用新的动态类型。动态类型使对COM对象进行后期绑定调用变得非常容易。

    string csv = ((dynamic)result).toString();