Tôi có một máy chủ COM ngoài quy trình cần theo dõi mọi thứ. Máy chủ này hoạt động như một dịch vụ và là nội bộ, một singleton. Để đơn giản, tôi sẽ gọi anh ta là BossCom.Làm cách nào tôi có thể sắp xếp một tham chiếu COM ngoài quy trình trên các ranh giới quá trình?
Tôi có một máy chủ COM ngoài quy trình khác là nhân viên. Đó là, để ổn định hệ thống, một máy chủ sử dụng một lần (có nghĩa là nếu bạn tạo 2 WorkerCom, có 2 WorkerCom.exe đang chạy). Để đơn giản, tôi sẽ gọi anh ta là WorkerCom.
WorkerCom có thể được bắt đầu bởi bất cứ điều gì, ngay cả khi chính nó nếu ai đó chạy anh ta thông qua dòng lệnh với các đối số dòng lệnh bên phải.
Mục tiêu tổng thể là để BossCom biết WorkerComs là gì, biết họ đang làm gì và có thể ra lệnh cho họ (tạm dừng, dừng, tăng tốc, v.v.).
Suy nghĩ ban đầu của tôi về điều này sẽ là bất cứ khi nào WorkerCom bắt đầu, ông sẽ CoCreateInstance một BossCom và gọi BossCom-> RegisterWorker (IUnknown me). Sau đó, khi WorkerCom sắp ngừng hoạt động, anh ta sẽ gọi BossCom-> UnregisterWorker (IUnknown me). BossCom có thể QueryInterface IUnknown cho IWorkerCom và có thể ra lệnh.
Điều đó sẽ hoạt động tốt nếu tất cả các đối tượng com này nằm trong cùng một quy trình, nhưng chúng không hoạt động. Tôi đã nghĩ về việc sử dụng GlobalInterfaceTable, nhưng nó chỉ toàn cầu theo nghĩa của một quá trình đơn lẻ.
Tôi đã dành một vài ngày nghiên cứu vấn đề này và đang thua lỗ. Có lẽ tôi đang nhìn đường hầm.
Làm cách nào tôi có thể so sánh tham chiếu đến đối tượng com từ Công nhân với Boss? 2,, và, cho những gì nó có giá trị, BossCom được viết bằng C# và WorkerCom được viết bằng ATL C++ nhưng tôi sẽ có các giải pháp được viết bằng VB, Scala, Lisp, hoặc bất cứ điều gì. Tôi hình dung tôi có thể dịch ý tưởng cốt lõi. :-)
Không này chỉ làm việc? Tôi thừa nhận tôi đã không làm bất cứ điều gì nhiều với COM, nhưng toàn bộ điểm của nó là out-of-process là bạn đã nhận được COM để cuộc gọi nguyên soái qua ranh giới quá trình, phải không? –
Phải, đối với hầu hết mọi thứ, nhưng IUnknown chỉ là một con trỏ, phải không? Con trỏ "this" trong WorkerCom sẽ không có bất kỳ ý nghĩa nào trong quyền BossCom? Hay quá trình đầm lầy sẽ giữ được ý nghĩa. Tôi đoán tôi ít nhất nên thử nó. –
Nó sẽ làm việc ra khỏi kệ cho là có proxy/stubs hoặc typelib để tạo điều kiện marshalling. Trong thực tế marshalling là chính xác cho điều đó - để cung cấp cho một khách hàng một đối tượng giả ("proxy") được nhân đôi với máy chủ. Nó hoạt động một cách minh bạch từ quan điểm mã. – sharptooth