van*_*ja. 5 javascript c# com com-interop
我通过COM Interop和WebBrowser WPF控件将我的JavaScript代码中的一些数据返回到我的C#代码.我已成功返回Javascript中的数据:
var result = new Array();
result[0] = cbCamera.selectedItem;
result[1] = cbMicrophone.selectedItem;
Run Code Online (Sandbox Code Playgroud)
现在我将对象结果放在C#中,如下所示:
result.GetType();
{Name = "__ComObject" FullName = "System.__ComObject"}
Run Code Online (Sandbox Code Playgroud)
如何获取此ComObject中此数组中包含的javascript字符串?
要查找 rutime 可调用包装器 (System.__ComObject) 中包含的对象的底层类型,您可以使用反射。然后,您将能够根据此信息创建或转换为托管类型。
例如;
string type = (string)result.GetType().InvokeMember("getType",
BindingFlags.InvokeMethod, null, result, null);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 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]
Run Code Online (Sandbox Code Playgroud)
编辑:在 c# 4.0 中执行此操作的第三种方法是使用新的动态类型。动态类型使得对 COM 对象进行后期绑定调用变得非常容易。
string csv = ((dynamic)result).toString();
Run Code Online (Sandbox Code Playgroud)