2009-04-03 33 views
5

Tôi đang trả về một số dữ liệu từ mã JavaScript của tôi tới mã C# của tôi qua COM Interop và điều khiển WPF WebBrowser. Tôi đã trở thành công các dữ liệu mà trông như thế này trong Javascript:Trả về một mảng từ JS thành C# với COM-Interop

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

Bây giờ tôi có kết quả đối tượng trong C# mà trông như thế này:

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

Làm thế nào tôi có thể nhận được chuỗi javascript chứa trong này mảng trong ComObject này?

Trả lời

3

Để tìm loại lớp phủ của đối tượng chứa trong trình bao bọc có thể gọi được rutime (System .__ ComObject), bạn sẽ sử dụng tính năng tinh chỉnh. Sau đó, bạn có thể tạo hoặc truyền sang loại được quản lý từ thông tin này.

Ví dụ;

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

Hoặc bạn có thể sử dụng invokeMember để truy xuất giá trị. Ví dụ, bạn có thể gọi phương thức valueOf để chuyển đổi mảng thành các giá trị nguyên thủy có ý nghĩa nhất có thể hoặc toString để chuyển mảng thành chuỗi csv.

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

EDIT: Cách thứ ba để làm điều này trong C# 4.0 là sử dụng loại động mới. Loại động làm cho nó thực sự dễ dàng để thực hiện cuộc gọi bị ràng buộc trễ trên các đối tượng COM.

string csv = ((dynamic)result).toString(); 
Các vấn đề liên quan