Il posto migliore per imparare Component Object Model [chiuso]


13

Devo imparare COM per il mio progetto attuale. Sono un noob e non sono stato in grado di trovare buoni punti di partenza per COM. Ho cercato MSDN e ho cercato su Google ... Ho trovato alcuni articoli interessanti su codeproject.com, ma non sono soddisfatto. Perché usiamo COM? Perché esiste? In quali posti esiste? ..... e così via .. Quindi, per favore, mi può dire dove posso trovare le risposte a queste domande?


3
Perché usiamo COM? Principalmente cerchiamo di non farlo. In quali posti esiste? Basi di codice legacy dolorose, in genere.
Carson63000,

@carson actully Sto sviluppando un software di monitoraggio in cui devo recuperare i valori degli oggetti "COM". Da qui il nuovo ritrovato Quest ..
Chani

1
Se ricordo bene, dei migliori 3 articoli web su COM, 2 erano su MSDN (alcuni vecchi articoli di una rivista) e 1 su CodeProject ... ovviamente ce ne sono centinaia di altri piuttosto utili, quindi è come trovare l'ago nel pagliaio. (e grazie a Google per aver restituito solo siti nel TLD ".com" quando cerco "COM" ...)
rwong

@ Carson63000 Così vero che fa male ... andando a piangere in un angolo ora.
Evicatos,

Risposte:


18
  • Innanzitutto, COM è proprio come la programmazione orientata agli oggetti. L'interfaccia COM è un'interfaccia astratta.
  • COM ha un vantaggio rispetto all'OOP incorporato di ciascuna lingua in quanto è possibile implementare le classi COM in lingue diverse e / o compilate da diverse versioni di compilatori e saranno comunque in grado di interagire. Questo si chiama "interfaccia binaria dell'applicazione" (ABI)
  • COM utilizza il conteggio dei riferimenti. All'inizio potrebbe essere fastidioso, ma non appena imparerai i suggerimenti intelligenti, la tua vita sarà molto più semplice e scoprirai che il concetto di conteggio dei riferimenti è molto facile da capire.
  • COM utilizza un modo strano di eseguire il casting di classe, vale a dire "Query Interface".

Imparare l' IUnnown è il primo passo.

Una buona interfaccia COM adatta allo studio per principianti è l'interfaccia IStream. È possibile esercitarsi nella COM implementando l'interfaccia IStream utilizzando molti modi di archiviare i dati.


Aggiunto il 28/09/2012:

Dopo l'invenzione del meccanismo COM, le persone di Microsoft hanno scoperto che questi meccanismi aprono la porta a insoliti trucchi di programmazione che non sono OOP ortodossi. Al livello più basso, IUnknown.QueryInterfaceè solo un metodo; può fare qualsiasi cosa. Questi trucchi rendono la COM intimidatoria per gli studenti, perché possono invalidare il ragionamento di base che può essere preso in prestito da OOP.

La documentazione Microsoft su MSDN trascorre molto tempo dicendo "COM non è ..." o "Non fare ipotesi" che spiega come questi trucchi insoliti possano violare il codice.

I progettisti COM utilizzano il principio di sostituzione Liskov (la "L" in SOLID ) per assicurarsi che le loro interfacce multiple e l'uso dei trucchi non invalidino il ragionamento OOP di base o il funzionamento del programma.

Se il tuo progetto non usa questi trucchi, va bene vedere COM solo dal punto di vista OOP. Se il progetto utilizza questi trucchi, sarà necessario visualizzare COM come codice di modifica automatica.

(Scherzo: abbiamo dovuto passare così tanto tempo con L che di solito ignoriamo gli altri quattro principi.)


9

Il motivo principale di COM è fornire un'interfaccia di comunicazione orientata agli oggetti tra un'applicazione e altre applicazioni e DLL che possono vivere in spazi di memoria diversi e tra oggetti che possono avere diverse rappresentazioni di oggetti interni.

Qualcosa da ricordare durante l'apprendimento di COM è che all'epoca C ++ era re e le applicazioni chiamate dll utilizzavano C. Non c'erano ABI comuni (come dice @rwong) e COM era la soluzione microsoft.

Probabilmente vale la pena dare un'occhiata ad Active Template Library (ATL) per Visual Studio che rende un po 'più facile usare anche COM.

Un paio di libri che ho trovato utili nel corso della giornata

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


7

Inizialmente ho imparato a conoscere COM dal libro Learning DCOM (DCOM è solo un'estensione di COM, il libro parla principalmente di COM). Ha più di dieci anni e dovrebbe essere economico se lo usi (dato che COM non è più esattamente caldo, nemmeno nel mondo Microsoft, anche se è ancora usato per l'interoperabilità).

Il motivo principale dell'esistenza di COM è facilitare lo sviluppo basato su componenti, il che significa sostanzialmente che invece di collegare le librerie quando si compila il codice, si fa riferimento a un'interfaccia (la descrizione di come comunicare con un componente esterno) e si utilizza l'implementazione di che quando si distribuisce. È alla base della maggior parte della tecnologia di Microsoft.

Il sistema supporta alcune funzionalità che erano interessanti prima che tutto andasse gestito (come il conteggio dei riferimenti e l'autodescrizione (tramite IDispatch)).


5

COM è uno standard creato negli anni '90 per consentire a diversi software di dialogare tra loro. Il più importante è lo standard binario che consente a un pezzo di software di creare o legarsi a un oggetto e quindi chiamare quell'interfaccia. Ciò consente di fare cose come creare una DLL in C ++ che può essere chiamata da una pagina ASP (oggetti COM) o creare un controllo in Delphi che è possibile inserire in una finestra di dialogo VB (controlli ActiveX) o foglio di lavoro Excel. Quando si incolla un'immagine in Word, utilizza anche COM, incorporando un'applicazione separata in Word. Meno popolare è DCOM che è quello di chiamare oggetti remoti, di solito ci sono modi più semplici per farlo.

Quindi Com / ActiveX / DCOM era molto popolare 10 anni fa con VB, VBA, C ++ / ATL, Delphi. Dotnet è molto più semplice e C # ha sostituito la maggior parte dell'uso di COM, VB ecc

Esistono ancora molte interfacce COM che potresti voler chiamare da un'applicazione dotnet o Java o C ++. (Non dire)

Se è necessario chiamare le interfacce COM, VB è il modo più semplice per farlo. In Dotnet 4.0 C # ha la parola chiave dinamica che rende molto più facile chiamare le interfacce IDispatch, che è probabilmente un'ottima soluzione che dovresti guardare.

Se hai bisogno di conoscere molti dettagli, devi davvero usare C ++ e ATL, chiama le API C come CoCreateInstance. Evitatelo se potete, poiché la sua vecchia tecnologia e non è molto utile, attenersi ai consigli sopra.

Non sono sicuro del software di monitoraggio che stai guardando, ma è probabile che sia disponibile tramite le classi System.Management in dotnet.


2

Di seguito potrebbe essere utile una panoramica COM COM:

Il primo video parla dell'idea generale di creare componenti binari per riutilizzare i codici scritti in lingue diverse (indipendenti dalla lingua) e si trovano in macchine (processi) diverse (indipendenti dalla posizione / trasparenti). Questa tecnologia viene utilizzata in alcune società di software per integrarsi con altri software (aziende) anziché acquistare il loro software e incorporarli nel proprio o scrivere i codici da zero nei loro sistemi.

Questa tecnologia ha tre diverse versioni (implementazioni):

OLE / COM / DCOM / ActiveX per sviluppatori C ++ (ATL viene utilizzato per semplificare il lavoro del programmatore)

JavaBeans / RMI / EJB per sviluppatori Java

CORBA / IIOP

Basti pensare a questa tecnologia come utile quando hai il tuo software scritto in Java e vuoi aggiungere una funzionalità che è già presente in un pacchetto ma è scritta in C ++ e forse si trova in un'altra macchina non in la tua macchina locale. Come si chiama "nuovo", come si creano oggetti e si chiamano metodi da essi?

I seguenti libri che ho visto persone che fanno la codifica COM hanno uno di loro nei loro scaffali:

  • Workshop per sviluppatori su COM e ATL 3.0

  • Inside Com

  • COM essenziale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.