1: op () broker_A broker_B
6.4.3 Giao tiếp giữa client và object
Cách thức của sự giao tiếp
Trước khi sử dụng một đối tượng COM trong một ứng dụng, ta cần khởi tạo cơ chế COM trong ứng dụng bằng lời gọi CoInitialize(...) và sau đó tạo đối tượng COM mong muốn. Client kết nối với object thông qua con trỏ giao diện và không bao giờ truy nhập trực tiếp vào object. Khi cần sử dụng dịch vụ nào đó của đối tượng, client hiểu rằng nó cần có con trỏ đến một hay nhiều giao diện của đối tượng. Để tạo một đối tượng COM và nhận một con trỏ vào giao diện, ta có thể gọi một trong hai hàm CoCreateInstance() hoặc CoCreateInstanceEx() với các tham số xác định đối tượng.
Hình 6-5: Giao tiếp giữa ₫ối tượng và khách hàng
Trong một số trường hợp, bản thân client sẽ đóng vai trị một object và cung cấp cho các đối tượng khác những chức năng gọi các sự kiện hoặc đưa ra các dịch vụ của nó. Lúc này client là một đối tượng thực thi còn object là một khách hàng.
Client
Application Interface Object Pointer
© 2005, Hồng Minh Sơn
Hình 6-6: Giao tiếp giữa hai ₫ối tượng
Giao tiếp trên cùng một q trình tính tốn
Khi client và đối tượng COM cùng nằm trên một q trình tính tốn thì client sẽ kết nối trực tiếp với object qua con trỏ giao diện.
Hình 6-7: Giao tiếp giữa ₫ối tượng và khách hàng trên cùng quá trình
Giao tiếp liên quá trình
Nếu client và object khơng cùng nằm trên một khơng gian địa chỉ hay nằm trên các máy tính khác nhau thì COM sẽ thiết lập một đối tượng đại diện (proxy) bên phía client và một đối tượng gốc (stub) bên phía object. Proxy và stub sẽ kết nối với nhau qua kênh giao tiếp (channel). Khi đó, client sẽ thực hiện lời gọi dịch vụ trong khơng gian địa chỉ của nó tức là giao tiếp trực tiếp với proxy. Proxy sẽ thu thập (marshal) các thông số, gửi chúng đến stub qua kênh giao tiếp. Stub thực hiện lời gọi đến đối tượng dịch vụ, đóng gói kết quả và đưa về cho proxy.
Hình 6-8: Giao tiếp giữa ₫ối tượng và khách hàng trên hai quá trình khác nhau Quá trình client client object server Quá trình client client proxy Proxy server COM Engine object Quá trình dịch v c c b hay t xa Stub server Object Application Object Application
© 2005, Hồng Minh Sơn