Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5

Chủ đề: Hiểu COM là gì?

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hiểu COM là gì?

    Component Object Model (COM)

    Khi COM bắt đầu được nhắc đến, thì phải mất một thời gian khá dài tôi mới hiểu được COM là gì và tầm quan trọng của nó.
    COM là một khái niệm rất trừu tượng, vì đại đa số những người lập trình không “thấy” COM. Khi chúng ta viết một dll hay một OCX trong VB là chúng ta đã làm một COM-object đó. Bởi vậy nhiều người tuy đã lập trình nhiều năm cũng không biết COM là gì, mà thật ra cũng không cần biêt nếu bạn không làm những chương trình đặc biệt, họac bạn muốn dùng những component viết bằng những ngôn ngữ khác như C và Java.

    COM là gì?

    COM là nền tảng “object model” cho ActiveX controls và OLE(Object Linking and Embedding ).
    COM làm cho những chức năng trong một object có thể được những components và chương trình khác sử dụng. Nói một cách dễ hiểu hơn thì COM là một dao diện đứng ở giữa (giống như một thông dich viên) để cho 2 components viết bằng 2 ngôn ngữ khác nhau có thể hiểu nhau.

    COM dùng vào việc gì?

    Tất cả những ActiveX và rất nhiều components trong cách chương trình đều có sự hiện diện của COM, đủ thấy tầm quan trong của nó. Nhờ COM bạn có thể viết một COM-object trong VB (một .ocx chẳng hạn) rồi sau đó dùng nó trong những chương trình khác, thí dụ như trong Excel, Word, Access họac tất cả những chương trình có COM interface.

    Nhưng tất nhiên COM không chỉ có như vậy. Bạn cứ thử nghĩ nếu công ty của bạn có nhiều lập trình viên mà mỗi người giỏi về một ngôn ngữ. Thí dụ bạn giỏi về C họac Java và tôi giỏi về VB. Làm một GUI (Graphic User Interface) trong C thì rất là tốn nhiều công, nhưng code của C thì rất là nhanh và làm được những việc mà VB không có thể làm được họac làm được nhưng tốc độ yếu, thi dụ như làm game 3D. Nhưng ngược lại làm GUI trong VB thì lại rất dễ và đẹp.
    Với sự giúp đỡ của COM chúng ta có thể làm một COM-interface (người thông dich) với những methods trong C-components, sau đó là GUI trong VB và Implements COM-interface, sau đó trong VB chỉ việc gọi những methods trong C-components.
    Như vậy chúng ta đã lấy những cái hay nhất của những ngôn ngữ để làm ra một chương trình hay nhờ COM. Cái lợi nữa là một CT có thể có các lập trình viên sử dụng ngôn ngữ khác nhau.

    Nguyên tắc cơ bản của COM

    I. Interfaces
    để cho các components khác có thể “thấy” và dùng những chức năng của COM.
    Interfaces giống như một chỗ trên bộ nhớ có những con trỏ đến các methods của một object. Ai đã dùng interface (TD: trong VB) se dễ hiểu vê interface hơn.
    mỗi interface nằm trên nền tảng của một COM-interface gọi là IUnknown, interface này sẽ cho phép đi đến những interface khác của object đó.
    mỗi interface có một khóa interface ID gọi là IID.
    II. IUnknown

    có 3 methods:

    QueryInterface – giúp tìm đúng interface.
    AddRef – đếm những object references (reference counting).
    Release – cũng để đếm object references.
    III. Reference Counting
    khi một object không dùng nữa thì phải xóa nó khỏi bộ nhớ. Reference counting dùng để kiểm tra xem object đó còn hay không.
    AddRef và Release dùng như tên của chúng, để đặt và xóa một reference.
    IV. QueryInterface
    Dùng để hỏi một object về một interface thì phải dùng QueryInterface . Để có thể tìm đựợc interface thì object đó phải dùng IID của interface đó. QueryInterface sẽ trả lại một con trỏ đến interface đó và đồng thời gọi AddRef.

    Gọi một QueryInterface trong C thì như thế này:
    Mã nguồn PHP:
    HRESULT QueryInterface(REFIID interface_id, LPVOID FAR *iface);Gọi một Interface trong COM thì phải đi qua những bước nhất định đề có thể dùng COM objects. Thí dụ sau dùng C++:HRESULT retValue = CoInitialize(NULL);if (retValue == S_OK) then{CoCreateInstance(CLSID_SOMEAPP, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown,(void**)&pIUnknown);retValue = pIUnknown->QueryInterface(IID_SOMEINTERFACE,(void**)&pISomeInterface);if (retValue == S_OK) then{pISomeInterface->Method1();pISomeInterface->Method2();/* When finished with the interface, call its Release() method! */pISomeInterface->Release();}else{/* Perform some default operation */DisableMenuItem(InterfaceMenu);}CoUninitialize();}  
    Vâng nhìn vào là thấy dội rồi đúng không các bạn (chắc không còn có người chê là dễ nữa đâu ), nhưng thật ra thì những code này cũng giống như khi chúng ta dùng winAPI, vì nó là như vậy chúng ta chi gọi những cái đã được định sẵn. Nhưng nói chung chúng ta không cần hiểu những code trên, đó chỉ là thí dụ để các bạn có khái niêm về nó thôi.

    Dùng COM object trong Java
    Bởi vì COM và Java gần giống nhau và Microsoft cũng làm cho những người dùng Java không phải đau đầu khi muốn dùng một COM-object, vì vậy một chương trình “Java Type Library Wizard” sẽ giúp người dùng Java làm Interface classes cho một COM-object. Khi chạy chương trình đó và cho nó biết COM object nào bạn muốn làm ra những interface class thì nó sẽ làm ra những class cần thiết để có thể gọi nhưng methods trong C/C++.....


    Nguồn: http://www.khkt.net/chu-de/17832-com...-object-model/

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bài viết vẫn chưa nói gì về COM cả.
    Tại sao lại COM? COM được Microsoft tạo ra với mục đích gì? Tại sao ActiveX và OLE lại base từ COM? Tại sao lại Interface? Interface để làm cái gì? Tại sao lại có 3 method default kia của IUnknown? IUnknown để làm cái gì? Tại sao lại phải kiểm tra object qua reference counting? Sao không có Singleton Pattern là đếm? IID để làm gì? Liệu có nhiều IID trùng nhau không? Nếu port cục IID đó sang máy khác có IID đó với COM khác thì sao? Tại sao lại phải CoInitialize(NULL) mà không CoInitialize(0) hay cái gì đó? Gọi CoInitialize rồi thì không gọi CoUninitialize thì có sao không? ..

    Bài viết chưa nói được cái gì về COM.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình đọc hiểu rất chi là lờ mờ.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    vậy COM là gì? [IMG]images/smilies/smile.png[/IMG])

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hướng dẫn tạo COM từng bước một, xem http://msdn.microsoft.com/en-us/libr...7x(VS.71).aspx

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •