5

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

4

1 回答 1

4

要查找包含在 rutime 可调用包装器 (System.__ComObject) 中的对象的底层类型,您可以使用 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();
于 2009-04-06T02:42:37.587 回答