Object Linking and Embedding

Object Linking &amp; Embedding (OLE) tạm dịch: "liên kết và nhúng đối tượng",  là một công nghệ độc quyền được phát triển bởi Microsoft cho phép nhúng và siêu liên kết với các tài liệu và các đối tượng khác. Đối với các nhà phát triển, nó mang lại OLE Control Extension (OCX), một cách để phát triển và sử dụng các phần tử giao diện người dùng tùy chỉnh. Ở cấp độ kỹ thuật, đối tượng OLE là bất kỳ đối tượng nào thực hiện giao diện IOleObject, có thể cùng với một loạt các giao diện khác, tùy thuộc vào nhu cầu của đối tượng.
Tổng quan.
OLE cho phép ứng dụng chỉnh sửa để xuất một phần tài liệu sang một ứng dụng chỉnh sửa khác và sau đó nhập nó với nội dung bổ sung. Ví dụ: một hệ thống xuất bản trên máy tính để bàn có thể gửi một số văn bản tới trình xử lý văn bản hoặc hình ảnh tới trình chỉnh sửa bitmap bằng OLE. Lợi ích chính của OLE là thêm các loại dữ liệu khác nhau vào một tài liệu từ các ứng dụng khác nhau, như trình soạn thảo văn bản và trình chỉnh sửa hình ảnh. Điều này tạo ra một tài liệu định dạng tập tin nhị phân hợp chất và một tập tin chủ mà tài liệu làm cho tài liệu tham khảo. Thay đổi dữ liệu trong tệp chính ngay lập tức ảnh hưởng đến tài liệu tham chiếu đến nó. Điều này được gọi là "liên kết" (thay vì "nhúng").
Việc sử dụng chính của nó là quản lý các định dạng tập tin nhị phân hợp chất, nhưng nó cũng được sử dụng để truyền dữ liệu giữa các phần mềm ứng dụng khác nhau bằng cách sử dụng thao tác kéo và thả và clipboard.
Lịch sử.
OLE 1.0.
OLE 1.0, phát hành năm 1990, là một sự phát triển của khái niệm Dynamic Data Exchange (DDE) ban đầu mà Microsoft đã phát triển cho các phiên bản trước của Windows. Mặc dù DDE bị giới hạn trong việc truyền lượng dữ liệu giới hạn giữa hai ứng dụng đang chạy, OLE có khả năng duy trì liên kết hoạt động giữa hai tài liệu hoặc thậm chí nhúng một loại tài liệu trong một tài liệu khác.
Các máy chủ và máy khách OLE giao tiếp với các thư viện hệ thống bằng cách sử dụng các bảng chức năng ảo hoặc VTBL. VTBL bao gồm một cấu trúc của các con trỏ hàm mà thư viện hệ thống có thể sử dụng để giao tiếp với máy chủ hoặc máy khách. Các thư viện máy chủ và máy khách, OLESVR.DLL và OLECLI.DLL,ban đầu được thiết kế để giao tiếp giữa chúng bằng cách sử dụng thông báo WM_DDE_EXECUTE.
OLE 1.0 sau đó đã phát triển để trở thành một kiến trúc cho các thành phần phần mềm được gọi là Mô hình đối tượng thành phần (Component Object Model-COM), và sau đó là DCOM.
Khi một đối tượng OLE được đặt vào clipboard hoặc được nhúng trong một tài liệu, cả hai biểu diễn trực quan trong các định dạng Windows nguyên bản (chẳng hạn như bitmap hoặc metafile) được lưu trữ, cũng như dữ liệu bên dưới theo định dạng riêng của nó. Điều này cho phép ứng dụng hiển thị đối tượng mà không tải ứng dụng được sử dụng để tạo đối tượng, đồng thời cho phép đối tượng được chỉnh sửa, nếu ứng dụng thích hợp được cài đặt.
Object Packager, một thành phần của OLE, có trong Windows 3.1 đến Windows XP cho phép một đối tượng không phải OLE được "đóng gói" để nó có thể được nhúng vào một chương trình khách OLE.
OLE 2.0.
OLE 2.0 là sự phát triển tiếp theo của OLE, chia sẻ nhiều mục tiêu giống như phiên bản 1.0, nhưng đã được triển khai lại trên mô hình đối tượng thành phần (COM) thay vì sử dụng trực tiếp VTBL. Các tính năng mới là tự động hóa OLE, kéo và thả, kích hoạt tại chỗ và lưu trữ có cấu trúc. Các biệt danh phát triển từ các tên đối tượng OLE 1, và cung cấp một đối tượng phân cấp và hệ thống đặt tên tài nguyên tương tự như các  URL hoặc URI, vốn được phát minh độc lập. Windows hiện đã hợp nhất hai công nghệ hỗ trợ loại URL Moniker và lược đồ URL Moniker.
Điều khiển tùy chỉnh OLE.
Các điều khiển tùy chỉnh OLE được giới thiệu vào năm 1994 như là một sự thay thế cho các điều khiển mở rộng Visual Basic Extension không được chấp nhận. Thay vì nâng cấp chúng, kiến trúc mới được dựa trên OLE. Đặc biệt, bất kỳ vùng chứa nào hỗ trợ OLE 2.0 đều có thể nhúng các điều khiển tùy chỉnh OLE, mặc dù các điều khiển này không thể phản ứng với các sự kiện trừ khi vùng chứa hỗ trợ điều này. Các điều khiển tùy chỉnh OLE thường được vận chuyển dưới dạng  dynamic link library phần mở rộng.ocx. Năm 1996 tất cả các giao diện điều khiển (ngoại trừ IUnknown) đã được thực hiện tùy chọn để giữ cho kích thước tập tin của điều khiển giảm bớt, để cho chúng sẽ tải xuống nhanh hơn; chúng được gọi là các ActiveX Control.
Chi tiết kỹ thuật.
Các đối tượng OLE và các thùng chứa được thực hiện trên Component Object Model; chúng là các đối tượng có thể thực hiện các giao diện để xuất khẩu các chức năng của chúng. Chỉ giao diện IOleObject là bắt buộc, nhưng các giao diện khác cũng có thể cần phải được thực hiện nếu chức năng mà được xuất bởi các giao diện đó là bắt buộc.
Để dễ hiểu những gì nói sau đây, một số thuật ngữ cần phải được giải thích rõ. Trạng thái xem của đối tượng là liệu đối tượng có trong suốt, mờ đục hoặc mờ đục với nền đồng nhất hay không và liệu đối tượng có hỗ trợ vẽ với một khía cạnh được chỉ định hay không. Trang của một đối tượng là một đối tượng biểu diễn vị trí của đối tượng trong vùng chứa của nó. Một vùng chứa làm nhiệm vụ hỗ trợ nơi lưu trữ đối tượng cho mọi đối tượng được chứa.
Sau đây là danh sách các giao diện, được nhóm theo đối tượng thường cần thực hiện chúng. Các giao diện thường được thực hiện bởi đối tượng OLE thường được gọi bởi thùng chứa OLE và ngược lại. Lưu ý rằng trong danh sách sau thụt đầu dòng chỉ ra việc thừa kế giao diện. Tất cả các giao diện không thụt vào được lấy từ  IUnknown.
Đối tượng OLE.
Một đối tượng không cửa sổ là một đối tượng không có cửa sổ riêng của nó, nhưng nó được hiển thị trong cửa sổ của vùng chứa của nó. Nó được container sử dụng để chuyển tiếp các thông báo nhận được bởi cửa sổ của container được thiết kế cho đối tượng chứa. Ví dụ, nếu con chuột được di chuyển qua một cửa sổ, Windows đặt một thông báo di chuyển chuột cùng với các tọa độ chuột trong hàng đợi tin nhắn của cửa sổ. Nếu cửa sổ này chứa các đối tượng nhúng không cửa sổ, thông báo có thể phải được chuyển tiếp đến một đối tượng như vậy nếu các tọa độ của con trỏ chuột nằm trên đối tượng này. Vì lý do tương tự, giao diện này cũng cung cấp quyền truy cập vào giao diện DropTarget của đối tượng