Tempat terbaik untuk belajar Component Object Model [ditutup]

13

Saya perlu belajar COM untuk proyek saya saat ini. Saya seorang noob dan saya belum dapat menemukan titik awal yang baik untuk COM. Saya telah mencari di MSDN dan googling ... Saya menemukan beberapa artikel menarik di codeproject.com, tetapi saya tidak puas. Mengapa kami menggunakan COM? Kenapa itu ada? Di tempat apa itu ada? ..... dan seterusnya .. Jadi, tolong beri tahu saya di mana saya dapat menemukan jawaban untuk pertanyaan-pertanyaan ini?

Chani
sumber
3
Mengapa kami menggunakan COM? Kebanyakan kami berusaha untuk tidak melakukannya. Di tempat apa itu ada? Database warisan yang menyakitkan, umumnya.
Carson63000
@carson actully saya mengembangkan perangkat lunak pemantauan di mana saya perlu mengambil nilai objek "COM". Karenanya Quest yang baru ditemukan ..
Chani 9'11
1
Jika saya ingat betul, dari 3 artikel web terbaik tentang COM, 2 ada di MSDN (beberapa artikel majalah lama) dan 1 ada di CodeProject ... jelas ada ratusan yang agak berguna lainnya, jadi itu seperti menemukan jarum di tumpukan jerami. (dan terima kasih Google karena hanya mengembalikan situs di TLD ".com" ketika saya mencari "COM" ...)
rwong
@ Carson63000 Jadi benar itu menyakitkan ... akan menangis di sudut sekarang.
Evicatos

Jawaban:

18
  • Pertama, COM seperti pemrograman berorientasi objek. Antarmuka COM adalah antarmuka abstrak.
  • COM memiliki keunggulan dibandingkan OOP internal masing-masing bahasa di mana Anda dapat menerapkan kelas COM dalam bahasa yang berbeda dan / atau dikompilasi oleh berbagai versi kompiler, dan mereka masih akan dapat saling beroperasi. Ini disebut "antarmuka biner aplikasi" (ABI)
  • COM menggunakan penghitungan referensi. Ini mungkin mengganggu pada awalnya, tetapi begitu Anda mengetahui tentang smart pointer, hidup Anda akan jauh lebih mudah dan Anda akan menemukan bahwa konsep penghitungan referensi sangat mudah dipahami.
  • COM menggunakan cara aneh casting kelas, yaitu "Query Interface".

Mempelajari IUnknown adalah langkah pertama.

Antarmuka COM yang baik yang cocok untuk studi pemula adalah antarmuka IStream. Anda dapat berlatih COM dengan mengimplementasikan antarmuka IStream menggunakan banyak cara menyimpan data.


Ditambahkan 2012/09/28:

Setelah mekanisme COM ditemukan, orang-orang di Microsoft menemukan bahwa mekanisme ini membuka pintu bagi trik pemrograman yang tidak biasa yang bukan OOP ortodoks. Pada level terendah, IUnknown.QueryInterfacehanyalah sebuah metode; itu bisa melakukan apa saja. Trik ini membuat COM mengintimidasi peserta didik, karena mereka dapat membatalkan penalaran dasar yang dapat dipinjam dari OOP.

Dokumentasi Microsoft di MSDN menghabiskan banyak waktu dengan mengatakan "COM bukan ..." atau "Jangan berasumsi" untuk menjelaskan bagaimana trik yang tidak biasa ini dapat memecahkan kode Anda.

Desainer COM menggunakan Prinsip Pengganti Liskov ("L" dalam SOLID ) untuk memastikan beberapa antarmuka dan penggunaan trik mereka tidak membatalkan penalaran OOP dasar atau operasi program.

Jika proyek Anda tidak menggunakan trik ini, tidak masalah untuk melihat COM hanya dari sudut pandang OOP. Jika proyek Anda menggunakan trik-trik ini, Anda perlu melihat COM sebagai kode pengubah sendiri.

(Lelucon: Kami harus menghabiskan begitu banyak waktu dengan L sehingga kami biasanya mengabaikan empat prinsip lainnya.)

rwong
sumber
9

Alasan utama COM adalah untuk menyediakan antarmuka komunikasi berorientasi objek antara aplikasi dan aplikasi lain dan lain-lain yang dapat hidup dalam ruang memori yang berbeda, dan antara objek yang mungkin memiliki representasi objek internal yang berbeda.

Sesuatu yang perlu diingat ketika belajar COM adalah bahwa pada saat C ++ adalah raja dan aplikasi yang disebut dll menggunakan C. Tidak ada ABI umum (seperti @rwong mengatakan) dan COM adalah solusi microsoft.

Mungkin patut untuk melihat Active Template Library (ATL) untuk studio visual yang membuatnya sedikit lebih mudah untuk menggunakan COM juga.

Beberapa buku yang saya temukan berguna pada hari itu

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/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4

hth

daven11
sumber
7

Saya awalnya belajar tentang COM dari buku Learning DCOM (DCOM hanyalah perpanjangan dari COM, buku ini kebanyakan tentang COM). Sudah lebih dari sepuluh tahun dan harus murah jika Anda menggunakannya (karena COM tidak lagi panas, bahkan di dunia Microsoft, meskipun masih digunakan untuk interop).

Alasan utama keberadaan COM adalah untuk memfasilitasi pengembangan berbasis komponen, yang pada dasarnya berarti bahwa alih-alih menautkan pustaka saat Anda menyusun kode, Anda mereferensikan antarmuka (deskripsi tentang bagaimana berkomunikasi dengan komponen eksternal) dan menggunakan beberapa implementasi dari itu ketika Anda menyebarkan. Ini mendasari sebagian besar teknologi Microsoft sendiri.

Sistem ini memiliki dukungan untuk beberapa fitur yang keren sebelum semuanya dikelola (seperti penghitungan referensi dan deskripsi-diri (melalui IDispatch)).

Deckard
sumber
5

COM adalah standar yang dibuat pada tahun 90-an untuk memungkinkan perangkat lunak yang berbeda untuk berbicara satu sama lain. Yang paling penting adalah standar biner yang memungkinkan satu perangkat lunak membuat atau mengikat ke objek dan kemudian memanggil ke antarmuka itu. Ini memungkinkan Anda untuk melakukan hal-hal seperti membuat DLL dalam C ++ yang dapat dipanggil oleh halaman ASP (Objek COM), atau membuat kontrol dalam Delphi yang dapat Anda tempatkan ke kotak dialog VB (kontrol ActiveX), atau lembar kerja Excel. Ketika Anda menempelkan gambar ke Word itu menggunakan COM juga, menanamkan aplikasi terpisah ke dalam kata. Yang kurang populer adalah DCOM yang memanggil objek jarak jauh, biasanya ada cara yang lebih sederhana untuk melakukan ini.

Jadi Com / ActiveX / DCOM sangat populer 10 tahun yang lalu dengan VB, VBA, C ++ / ATL, Delphi. Dotnet jauh lebih sederhana dan C # telah menggantikan sebagian besar penggunaan COM dan VB dll

Masih ada banyak antarmuka COM di sana yang ada yang mungkin ingin Anda panggil dari aplikasi dotnet atau Java atau C ++. (Kamu tidak bilang)

Jika Anda perlu memanggil antarmuka COM, VB adalah cara paling sederhana untuk melakukan ini. Di Dotnet 4.0 C # memiliki kata kunci dinamis yang membuatnya lebih mudah untuk memanggil antarmuka IDispatch, yang mungkin merupakan solusi hebat yang harus Anda perhatikan.

Jika Anda perlu mengetahui banyak detail, Anda benar-benar perlu menggunakan C ++ dan ATL, hubungi C API seperti CoCreateInstance. Hindari ini jika Anda bisa menggunakan teknologi lama dan tidak banyak menggunakan, tetap dengan rekomendasi di atas.

Saya tidak yakin perangkat lunak pemantauan apa yang Anda lihat tetapi kemungkinan akan tersedia melalui kelas System.Management di dotnet.

Richard
sumber
2

Berikut ini adalah gambaran umum COM yang berguna:

Video pertama berbicara tentang ide umum membuat Komponen Biner untuk menggunakan kembali kode yang ditulis dalam bahasa yang berbeda (bahasa-independen) dan berada di mesin yang berbeda (proses) (lokasi independen / transparan). Teknologi ini digunakan di beberapa Perusahaan Perangkat Lunak untuk berintegrasi dengan perangkat lunak lain (perusahaan) alih-alih membeli perangkat lunak mereka dan menanamkannya ke dalam perangkat mereka sendiri atau menulis kode dari awal di sistem mereka.

Teknologi ini memiliki tiga versi berbeda (implementtaions):

OLE / COM / DCOM / ActiveX untuk pengembang C ++ (ATL digunakan untuk membuat pekerjaan programmer lebih mudah)

JavaBeans / RMI / EJB untuk pengembang Java

CORBA / IIOP

Anggap saja sebagai teknologi yang berguna ketika Anda memiliki perangkat lunak Anda ditulis dalam Java dan Anda ingin menambahkan fungsionalitas untuk itu yang sudah ada dalam paket tetapi ditulis dalam C ++ dan bahkan mungkin terletak di mesin yang berbeda bukan di mesin lokal Anda. Bagaimana Anda memanggil "baru", bagaimana Anda membuat objek dan memanggil metode dari mereka?

Buku-buku berikut yang saya lihat orang-orang yang melakukan pengkodean COM memiliki salah satu dari mereka di rak buku mereka:

  • Workshop Pengembang untuk COM dan ATL 3.0

  • Di dalam Com

  • COM penting

Mahshid Zeinaly
sumber