Tôi muốn tạo đối tượng COM trong C# và sử dụng nó thông qua IDispatch từ JScript. Phần đó khá đơn giản.Tạo COM/ActiveXObject trong C#, sử dụng từ JScript, với sự kiện đơn giản
Tôi cũng muốn triển khai các cuộc gọi lại đơn giản trên đối tượng COM, tương tự như sự kiện được hiển thị bởi đối tượng XmlHttpRequest có thể sử dụng trong trình duyệt. mô hình cho phép Javascript để đính kèm xử lý sự kiện như thế này:
var xmlhttp = new ActiveXObject("MSXML.XMLHTTP");
xmlhttp.onReadyStateChange = function() {
...
};
Tôi muốn mã JScript client-side của tôi trông như thế này:
var myObject = new ActiveXObject("MyObject.ProgId");
myObject.onMyCustomEvent = function(..args here..) {
...
};
gì mã C# như thế nào? Tôi muốn các trường hợp chung - Tôi muốn để có thể vượt qua các đối số trở lại Javascript fn.
Tôi đã xem How can I make an ActiveX control written with C# raise events in JavaScript when clicked?, nhưng câu trả lời có vẻ thực sự phức tạp để triển khai và phức tạp khi sử dụng.
Từ this article, có vẻ như sự kiện XMLHttpRequest không phải là sự kiện COM. Các onreadystatechange
là một tài sản của loại IDispatch
. Khi các trình khách kịch bản thiết lập thuộc tính đó cho một hàm, JScript sắp xếp nó như một đối tượng IDispatch.
Vấn đề duy nhất còn lại là sau đó gọi IDispatch từ C#.
Đây là cuộc gọi bị ràng buộc muộn, không phải là sự kiện. Sử dụng thuộc tính [ComSourceInterfaces] để hiển thị các sự kiện .NET. –
Chính xác. Nó không phải là một sự kiện COM ở tất cả, nhưng nó chắc chắn là đơn giản để xây dựng và sử dụng hơn dây lên các sự kiện COM cho kịch bản hạn chế này - một đối tượng và một người dùng của đối tượng đó. Và trên thực tế, mặc dù nó không phải là một sự kiện COM, các lập trình viên hiểu chính xác nó để đáp ứng nhu cầu của họ về "một sự kiện" cho một đối tượng có thể viết được. Đây là lý do tại sao XMLHttpRequest sử dụng cách tiếp cận, tôi giả sử, cho 'onreadystatechange'. Điều đó nữa, là "không ** một sự kiện **" nhưng chắc chắn nó được hiểu là một sự kiện của hàng triệu dev. Định nghĩa cụ thể của COM về thuật ngữ "sự kiện" không liên quan đến một số mục đích. – Cheeso
Khi tạo ActiveXObject trong JScript, có phải '' Cheeso.Greet "' xuất phát từ 'ProjId', tên DLL,' Namespace.ClassName' hoặc ở một nơi khác hoàn toàn không? Không có vấn đề gì tôi cố gắng tôi dường như luôn luôn nhận được "Tự động hóa máy chủ không thể tạo đối tượng". –