【问题标题】:Returning an array from JS to C# with COM-Interop使用 COM-Interop 将数组从 JS 返回到 C#
【发布时间】:2009-04-03 09:07:01
【问题描述】:

我通过 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 字符串?

【问题讨论】:

    标签: c# javascript com com-interop


    【解决方案1】:

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

    例如;

    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();
    

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2011-09-28
      • 2016-01-25
      • 1970-01-01
      • 2021-10-10
      • 2010-11-02
      • 2020-07-06
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多