Nơi tốt nhất để tìm hiểu Mô hình đối tượng thành phần [đã đóng]


13

Tôi cần học COM cho dự án hiện tại của tôi. Tôi là một người mới và tôi chưa thể tìm thấy điểm khởi đầu tốt cho COM. Tôi đã tìm hiểu về MSDN và googling ... Tôi đã tìm thấy một số bài viết thú vị trên codeproject.com, nhưng tôi không hài lòng. Tại sao chúng ta sử dụng COM? Tại sao nó tồn tại? Nó tồn tại ở những nơi nào? ..... và như vậy .. Vì vậy, bạn sẽ vui lòng cho tôi biết tôi có thể tìm câu trả lời cho những câu hỏi này ở đâu?


3
Tại sao chúng ta sử dụng COM? Chủ yếu là chúng tôi cố gắng không. Nó tồn tại ở những nơi nào? Nói chung di sản đau đớn, nói chung.
Carson63000

@carson Actully tôi đang phát triển một phần mềm giám sát trong đó tôi cần tìm nạp các giá trị của các đối tượng "COM". Do đó, Quest mới được tìm thấy ..
Chani

1
Nếu tôi nhớ chính xác, trong số 3 bài viết trên web tốt nhất về COM, 2 là trên MSDN (một số bài viết trên tạp chí cũ) và 1 là trên CodeProject ... rõ ràng có hàng trăm bài viết hữu ích khác, vì vậy nó giống như tìm kim trong haystack. (và cảm ơn Google vì chỉ trả lại các trang web trong TLD ".com" khi tôi tìm kiếm "COM" ...)
rwong

@ Carson63000 Thật sự rất đau ... sắp khóc ở một góc.
Evicatos

Câu trả lời:


18
  • Thứ nhất, COM giống như lập trình hướng đối tượng. Giao diện COM là một giao diện trừu tượng.
  • COM có một lợi thế so với OOP tích hợp sẵn của mỗi ngôn ngữ ở chỗ bạn có thể có các lớp COM được triển khai bằng các ngôn ngữ khác nhau và / hoặc được biên dịch bởi các phiên bản trình biên dịch khác nhau và chúng vẫn có thể hoạt động lẫn nhau. Đây được gọi là "giao diện nhị phân ứng dụng" (ABI)
  • COM sử dụng tính tham chiếu. Ban đầu nó có thể gây khó chịu, nhưng ngay khi bạn tìm hiểu về con trỏ thông minh, cuộc sống của bạn sẽ dễ dàng hơn nhiều và bạn sẽ thấy rằng khái niệm đếm tham chiếu là rất dễ hiểu.
  • COM sử dụng một cách kỳ lạ để tạo lớp, cụ thể là "Giao diện truy vấn".

Học IUn Unknown là bước đầu tiên.

Giao diện COM tốt, phù hợp cho nghiên cứu của người mới bắt đầu là giao diện IStream. Bạn có thể thực hành COM bằng cách triển khai giao diện IStream bằng nhiều cách lưu trữ dữ liệu.


Đã thêm 2012/09/11:

Sau khi cơ chế COM được phát minh, mọi người tại Microsoft đã phát hiện ra rằng các cơ chế này mở ra cơ hội cho các thủ thuật lập trình bất thường không phải là OOP chính thống. Ở cấp độ thấp nhất, IUnknown.QueryInterfacechỉ là một phương pháp; nó có thể làm bất cứ điều gì Những mánh khóe này làm cho COM trở nên đáng sợ đối với người học, bởi vì chúng có thể làm mất hiệu lực lý do cơ bản có thể được mượn từ OOP.

Tài liệu của Microsoft tại MSDN dành nhiều thời gian để nói rằng "COM không phải là ..." hoặc "Không giả định" giải thích làm thế nào những thủ thuật bất thường này có thể phá vỡ mã của bạn.

Các nhà thiết kế COM sử dụng Nguyên tắc thay thế Liskov ("L" trong RẮN ) để đảm bảo nhiều giao diện và sử dụng các thủ thuật của họ không làm mất hiệu lực lý luận OOP cơ bản hoặc hoạt động chương trình.

Nếu dự án của bạn không sử dụng các thủ thuật này, bạn có thể thấy COM chỉ từ quan điểm OOP. Nếu dự án của bạn sử dụng các thủ thuật này, bạn sẽ cần xem COM là mã tự sửa đổi.

(Trò đùa: Chúng tôi đã phải dành rất nhiều thời gian với L đến nỗi chúng tôi thường bỏ qua bốn nguyên tắc khác.)


9

Lý do chính của COM là cung cấp giao diện truyền thông hướng đối tượng giữa một ứng dụng và các ứng dụng khác và các dll có thể sống trong các không gian bộ nhớ khác nhau và giữa các đối tượng có thể có các biểu diễn đối tượng bên trong khác nhau.

Một điều cần nhớ khi học COM là vào thời điểm C ++ là vua và các ứng dụng được gọi là dll's sử dụng C. Không có ABI chung (như @rwong nói) và COM là giải pháp microsoft.

Có lẽ bạn nên xem qua Thư viện mẫu hoạt động (ATL) cho phòng thu trực quan, điều này cũng giúp sử dụng COM dễ dàng hơn một chút.

Một vài cuốn sách tôi thấy hữu ích trở lại trong ngày

http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1

http://www.amazon.com/Under Hiểu-ActiveX-OLE-Developers-T Technology / dp / 1572312165 / ref = pd_sim_b_4

thứ


7

Ban đầu tôi học về COM từ cuốn sách Học DCOM (DCOM chỉ là phần mở rộng của COM, cuốn sách chủ yếu là về COM). Nó đã hơn mười tuổi và sẽ rẻ nếu bạn sử dụng nó (vì COM không còn nóng nữa, ngay cả trong thế giới Microsoft, mặc dù nó vẫn được sử dụng để xen kẽ).

Lý do chính để COM tồn tại là để tạo điều kiện cho phát triển dựa trên thành phần, về cơ bản có nghĩa là thay vì liên kết các thư viện khi bạn biên dịch mã, bạn tham chiếu một giao diện (mô tả về cách giao tiếp với một thành phần bên ngoài) và sử dụng một số triển khai mà khi bạn triển khai. Nó làm nền tảng cho hầu hết công nghệ của chính Microsoft.

Hệ thống đã hỗ trợ một số tính năng thú vị trước khi mọi thứ được quản lý (chẳng hạn như đếm tham chiếu và tự mô tả (thông qua IDispatch)).


5

COM là một tiêu chuẩn được tạo ra trong những năm 90 để cho phép các phần mềm khác nhau nói chuyện với nhau. Quan trọng nhất là tiêu chuẩn nhị phân cho phép một phần mềm tạo hoặc liên kết với một đối tượng và sau đó gọi vào giao diện đó. Điều này cho phép bạn thực hiện những việc như tạo DLL trong C ++ có thể được gọi bởi trang ASP (Đối tượng COM) hoặc tạo điều khiển trong Delphi mà bạn có thể đặt vào hộp thoại VB (điều khiển ActiveX) hoặc bảng tính Excel. Khi bạn dán ảnh vào Word, nó cũng sử dụng COM, nhúng một ứng dụng riêng vào word. DCOM ít phổ biến hơn là gọi các đối tượng từ xa, thường có những cách đơn giản hơn để làm điều này.

Vì vậy, Com / ActiveX / DCOM đã rất phổ biến 10 năm trước với VB, VBA, C ++ / ATL, Delphi. Dotnet đơn giản hơn nhiều và C # đã thay thế hầu hết việc sử dụng COM và VB, v.v.

Vẫn có nhiều giao diện COM tồn tại trong đó tồn tại mà bạn có thể muốn gọi từ một ứng dụng dotnet hoặc Java hoặc C ++. (Bạn không nói)

Nếu bạn cần gọi giao diện COM, VB là cách đơn giản nhất để thực hiện việc này. Trong Dotnet 4.0 C # có từ khóa động giúp gọi giao diện IDispatch dễ dàng hơn nhiều, đây có lẽ là một giải pháp tuyệt vời mà bạn nên xem xét.

Nếu bạn cần biết nhiều chi tiết, bạn thực sự cần sử dụng C ++ và ATL, hãy gọi các API C như CoCreateInstance. Tránh điều này nếu bạn có thể mặc dù là công nghệ cũ của nó và không được sử dụng nhiều, hãy tuân thủ các khuyến nghị ở trên.

Tôi không chắc phần mềm giám sát nào bạn đang xem nhưng có khả năng phần mềm này có sẵn thông qua các lớp System.Man Management trong dotnet.


2

Dưới đây có thể là tổng quan COM hữu íchM:

Video đầu tiên nói về ý tưởng chung về việc tạo Thành phần nhị phân để sử dụng lại các mã được viết bằng các ngôn ngữ khác nhau (độc lập với ngôn ngữ) và trong các máy (quy trình) khác nhau (độc lập với vị trí / minh bạch). Công nghệ này được sử dụng trong một số Công ty phần mềm để tích hợp với các phần mềm (công ty) khác thay vì mua phần mềm của họ và nhúng chúng vào phần mềm của riêng họ hoặc viết mã từ đầu trong hệ thống của họ.

Công nghệ này có ba phiên bản khác nhau (triển khai):

Các nhà phát triển OLE / COM / DCOM / ActiveX cho C ++ (ATL được sử dụng để làm cho công việc của lập trình viên dễ dàng hơn)

JavaBeans / RMI / EJB dành cho nhà phát triển Java

CORBA / IIOP

Chỉ cần nghĩ về nó như một công nghệ có ích khi bạn có phần mềm được viết bằng Java và bạn muốn thêm một chức năng cho nó đã tồn tại trong một gói nhưng nó được viết bằng C ++ và thậm chí có lẽ nằm trong các máy khác không phải trong máy địa phương của bạn. Làm thế nào để bạn gọi "mới", làm thế nào để bạn tạo các đối tượng và gọi các phương thức từ chúng?

Những cuốn sách sau đây mà tôi đã thấy những người làm mã hóa COM có một trong số chúng trong giá sách của họ:

  • Hội thảo dành cho nhà phát triển đến COM và ATL 3.0

  • Bên trong

  • COM cần thiết

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.