2009-05-04 64 views
6

Tôi không thể che giấu sự khác biệt giữa các thuật ngữ này.Sự nhầm lẫn COM/OLE/ActiveX/IDispatch

Từ đồng nghĩa COM và ActiveX phải không?

Đối tượng ActiveX có phải là đối tượng COM hiển thị IDispatch không?

Rất nhiều trang MSDN cũ đề cập đến IDispatch mà không có bất kỳ ngữ cảnh COM nào. Liệu nó có một lịch sử riêng biệt, và chỉ được giới thiệu dưới 'chiếc ô' COM sau này trong vòng đời của nó?

OLE khớp với đâu? Là sự hiện diện (đáng kể) của nó trong MFC đặt tên và MSDN nói chung - tất cả chỉ là di sản?

Wikipedia cung cấp một số thông tin chi tiết, nhưng không nhiều. Tôi không thể tìm thấy một tài liệu tham khảo sâu hơn.

Trả lời

7

Tìm thấy một số trích dẫn từ COM Programming by Example:

Một điều bạn sẽ nhanh chóng tìm thấy với COM là tiếp thị có một lĩnh vực chuyến đi ngày với các thuật ngữ. Thay vào đó, hãy xem để giúp thúc đẩy sự hiểu biết, bạn sẽ tìm thấy trong hầu hết các trường hợp, nó khuyến khích bí ẩn. ... OLE, ActiveX, Remotable Đối tượng - cái nào có nghĩa là gì tuần này? ...

COM phát triển ra khỏi giải pháp cho một vấn đề cụ thể - làm thế nào để cho phép một từ xử lý để chỉnh sửa bảng tính trong một lá thư mà không cần người dùng phải thoát các trình xử lý để làm điều đó. Giải pháp này được gọi là OLE. ... Tuy nhiên, với việc phát hành thứ hai của OLE (OLE2), sáng tạo đổi OLE32.DLL của nó để hiển thị thêm các chức năng cơ bản của OLE để API của nó có thể được sử dụng cho phép bất kỳ ứng dụng để acess các chức năng của người khác. API này, không thay đổi nhiều kể từ năm 1993, là những gì được coi là API COM . ...

Khi API COM bị phơi bày, Microsoft sử dụng nó để tạo ra những gì đã sau đó được gọi là OLE điều khiển để cho phép điều khiển phức tạp (ví dụ, các nút rằng xoắn ốc, hộp danh sách đó chơi nhạc) viết bằng Visual C++ được có thể truy cập vào Visual Basic ứng dụng. Cuối cùng, công nghệ này đã được sử dụng để cho phép điều khiển được tải xuống và sử dụng bởi trình duyệt web của bạn . Tại thời điểm này, tên đã thay đổi thành điều khiển ActiveX hoặc chỉ ActiveX đơn thuần hoàn toàn là lý do tiếp thị cho các lý do . Mặc dù bạn có thể đóng gói bất kỳ chức năng nào trong Điều khiển ActiveX, yêu cầu lại của nó là dành riêng cho việc hỗ trợ người dùng kiểm soát giao diện người dùng .

Tôi vẫn tò mò về câu cuối cùng - phải đối tượng COM thỏa mãn một số yêu cầu bổ sung để đủ điều kiện làm điều khiển ActiveX không? - nhưng đủ để cho nó đi.

Cảm ơn câu trả lời của bạn!

+1

"phải có đối tượng COM thỏa mãn một số yêu cầu bổ sung để đủ điều kiện làm điều khiển ActiveX" Có. Tôi không chắc họ là gì. Nó có lẽ chỉ là nó phải thực hiện một số giao diện cụ thể. –

+1

Không có đặc tả cứng nhắc nào về điều này. Ngay cả các tài liệu nói rằng container nên duyên dáng làm suy giảm khi một điều khiển ActiveX không thực hiện một giao diện. –

+0

Thông số ban đầu cho ActiveX Controls có các giao diện cần thiết để thực hiện điều khiển hữu ích trong Internet Explorer và/hoặc Visual Basic. Nhưng những bộ giao diện đó đã thay đổi theo thời gian và các ứng dụng có nhiều giao diện bị thiếu hơn, vì vậy cuối cùng bất cứ thứ gì hỗ trợ giao diện COM IUnknown đều có thể được coi là thành phần ActiveX. –

4

ActiveX là tiếp thị cho COM, mặc dù ActiveX thường được sử dụng trong ngữ cảnh "Điều khiển ActiveX" là đối tượng GUI. IDispatch là một giao diện được thực hiện bởi các đối tượng COM để các chương trình khách có thể gọi các phương thức của nó một cách linh động trong thời gian chạy (trễ), trái ngược với thời gian biên dịch mà tất cả các phương thức và kiểu đối số cần phải được biết trước thời gian.

OLE là phiên bản cũ hơn của COM.

1

Về OLE: COM có nguồn gốc của nó trong OLE. Nhưng ngày nay, OLE có thể được coi là được xây dựng trên đầu trang của COM và chủ yếu được sử dụng cho những gì tên của nó gợi ý - liên kết tài liệu và nhúng. Trong khi COM tự xác định chỉ một vài giao diện chính nó (IUnknown, IClassFactory, IMalloc vv), OLE thêm một bó toàn bộ các giao diện bổ sung như IMoniker, IOleItemComtainer, v.v.

Tóm lại: COM là nền tảng, ActiveX và OLE là các lớp trên đầu trang của COM.

+0

Tôi hiện đang làm việc trên một chủ đề tương tự và trong thời gian này tôi tìm thấy hai liên kết có thể hữu ích ở đây: http://msdn.microsoft.com/en-us/library/aa751972(v=vs.85).aspx #ActiveX_Controls '... Nói cách khác, một điều khiển, ít nhất, là một số đối tượng COM hỗ trợ giao diện IUnknown và cũng tự đăng ký' http://support.microsoft.com/kb/159621/vi -us – juniper