2009-05-22 20 views
28

Sono curioso di COM +, DCOM. So che MSFT non ti incoraggia a usare questi strumenti in modo nativo (cioè con C/C++, in effetti non c'è molta documentazione disponibile) ma voglio imparare a usare queste tecnologie, come incorporare Internet Explorer in un programma C.COM, COM +, DCOM, da dove iniziare?

Ho pensato che forse potrei trovare persone che hanno lavorato con questo o con questa tecnologia.

Da dove iniziare? Qualche idea? Qualche esempio (come Hello World DCOM)?

+4

A proposito, non scoraggiarti della quantità di apprendimento suggerita dalle nostre risposte. Sembra che tu stia cercando di scrivere un client COM piuttosto che un componente COM. I client COM sono più facili da scrivere di ordine di grandezza rispetto ai componenti COM. Ti divertirai. –

risposta

34

Se si è seriamente interessati all'apprendimento COM, la "COM essenziale" di Don Box è sicuramente un "must read" assoluto. COM può essere fonte di confusione e, a mio modesto parere, Don Box è una delle poche persone che in realtà ha "capito".

Il codice di esempio in "Essential COM" è in C++. Non troverai molti libri che supportano COM in C. Puoi scrivere COM in C, ma sarà molto, molto doloroso. COM è ottimizzata per lo sviluppo C++.

Questo libro non è perfetto né "completo". Ci sono alcune aree (concesse, un po 'esoteriche) che il libro sfiora. Ad esempio, il libro ha circa 1 1/2 pagine su "moniker" (non ho mai visto un trattamento di moniker che mi soddisfi). Considero questo libro come il libro fondamentale.

Secondo, nella vita reale è probabile che si desideri utilizzare una libreria di supporto come ATL, anziché scrivere direttamente la colla COM. Esistono troppi modi per commettere errori impercettibili in COM anche nell'impostazione di base. ATL ti darà buoni schemi e implementerà il codice noioso per te. Nell'apprendimento, è meglio usare semplicemente il C++.

Ci sono molti libri su ATL e molti sono abbastanza buoni. Capisco che ATL è cambiato un po 'dai vecchi tempi di VC++ 6, ma non ho conoscenze di prima mano lì: purtroppo, la maggior parte del codice COM con cui lavoro è bloccato per sempre al sapore di C++ in VC6 .

Assicurati che tutto il libro che ricevi sia scritto per la versione di Visual Studio e/o ATL che stai pianificando di utilizzare.

Alcuni retroscena sui libri COM:

Nota che ci sono un sacco di libri là fuori che fraintendono COM, o si concentrano sulle cose sbagliate. I libri più vecchi sono peggio in questo senso. Alcuni dei primi libri hanno trattato COM come poco più di un dettaglio idraulico necessario per far funzionare OLE ("Object Linking and Embedding", questo è ciò che consente di trascinare e rilasciare un intervallo di fogli elettronici in un documento Word). Per questo motivo, molto materiale là fuori è molto confuso. Ci è voluto un po 'di tempo prima che le persone si rendessero conto che OLE non era così importante e che COM era veramente.

Quando Don Box pubblicò "Essential COM", le crepe sulle fondamenta della COM avevano iniziato a diventare evidenti. Non c'è nulla di terribilmente imperfetto nella COM, ma i bisogni della comunità di sviluppo si sono evoluti e superati ciò che la COM potrebbe fare senza un serio revamping.

.NET è nato da questo sforzo per risolvere i limiti di COM, soprattutto nell'area "informazioni sul tipo". Solo pochi anni dopo la pubblicazione di "Effective COM", l'attenzione della comunità si è spostata su .NET. Per questo motivo, un buon materiale di formazione COM è ora e probabilmente rimarrà per sempre limitato.

Quindi, COM non è danneggiato e funziona perfettamente per le cose per cui è utilizzato (ecco perché Explorer lo utilizza ancora). Non è più la soluzione migliore per molti dei problemi che devono essere risolti oggi.

In sintesi:

mi raccomando "COM Essential" per le basi. Quindi, uno qualsiasi dei molti buoni libri ATL disponibili (nessuna preferenza forte lì), e quindi utilizzare altre risorse come MSDN o, ovviamente, Stack Overflow, per coprire aree che sono di particolare interesse per voi.

Se preferisci evitare di fare affidamento sulle risorse della varietà dead-tree, vai avanti e impara ATL dal web. Ma alcuni libri valgono la pena di leggere alla vecchia maniera - e "Essential COM" è uno di questi.

Buona fortuna.

1

In realtà, se volete saperne di più su COM, Microsoft pubblica un libro su COM e come funziona ... http://www.amazon.com/Inside-Microsoft-Programming-Dale-Rogerson/dp/1572313498/ref=sr_1_2?ie=UTF8&s=books&qid=1243029018&sr=8-2

+0

Questo è lo stato dell'arte? Sembra un po 'vecchio. –

+3

COM è vecchio. Negli ultimi 8 anni, tutta la roba di Microsoft Press è stata su .NET. – Cheeso

+0

@Cheeso ha ragione; COM è una vecchia tecnologia. Microsoft si sta concentrando su .NET per la maggior parte del suo nuovo sviluppo, ma lo sviluppo COM è ancora completamente valido; è solo che la maggior parte dei riferimenti su di essa sarà un po 'vecchia. –

10

COM, COM+ e DCOM sono tre cose completamente diverse. A questo punto, c'è ben poca ragione per imparare COM e quasi nessuna ragione per imparare DCOM. L'unica ragione per cui posso pensare è se devi mantenere o integrare i componenti legacy. COM + è ancora utilizzato perché consente l'hosting fuori processo di componenti e cose carine come la gestione delle transazioni distribuite.

Il modo migliore per iniziare a scrivere su COM sta utilizzando ATL. In .NET COM + si chiama Enterprise Services.

Il miglior libro che conosco su COM è Don Box Essential COM e Tim Ewald COM+ book è eccellente.

+2

+1 per "c'è poco motivo per imparare COM", -1 per suggerire ATL ai neofiti. Evens out :) – Andomar

+0

@Andomar: lol, so che è ridicolo. :) –

+5

Il nuovo core WinRT di Windows 8 è basato su COM. I programmatori commerciali con una buona conoscenza della COM sono stati molto richiesti per anni e continueranno ad essere richiesti per molti anni ancora. – Neutrino

3

COM è ancora utile se si desidera lavorare o estendere varie API di Windows, come le estensioni della shell, l'host di script e così via.

Essential COM (Box) e ATL Internals (Rector and Sells) sono fonti eccellenti. Efficace COM (Box, et al) è anche ok.

Se si desidera veramente l'immagine completa su COM, provare a ottenere una copia dell'immenso Inside OLE (Brockschmidt).

Distributed COM (Eddon, Eddon) è discreto su DCOM, così come all'interno COM + Base Services (Eddon, Eddon) su COM +.

anche alcuni libri di C++ apparentemente "puri" contengono bit in COM. Imperfet C++ di Matthew Wilson ha alcune parti utili per vedere come funziona all'interno, e il suo libro Extended STL ha un paio di capitoli su come adattare le collezioni COM alle STL.

Se si desidera saperne di più su come scrivere server COM, è probabile che sia necessario utilizzare ATL. L'ATL Internals di cui sopra è un must. Nonostante il suo umile titolo, Beginning ATL COM ha anche alcune cose utili.

Anche utile nel processo di apprendimento potrebbe essere quello di contrastare COM con .NET. Il manuale di interoperabilità .NET e COM è un grande inghippo, ma contiene alcune cose utili. Inoltre, vorrei verificare Shared Source CLI Essentials, solo per aiutare a contrastare le due technoloqie.

HTH

+1

> Essential COM (Box, et al) è anche ok ... Intendi "COM efficace" per la tua seconda voce, giusto? –

+0

Altro giro. Grazie per averlo individuato. – DannyT

+2

Davvero? "COM efficace" è Box, Brown, Ewald e Sells. "COM essenziale" è solo Box. Entrambi sono grandi libri. –

2

COM Essential è particolarmente per implementare o utilizzando componenti COM da C++, senza utilizzare un IDE, quadro, o libreria center.

COM è semplice da utilizzare da VB o da Delphi, ad esempio, che nasconde la colla COM specifica dal programmatore dell'applicazione. In C++ si usa spesso una libreria di classi che tenta di astrarre i dettagli ...Essential COM ti dirà quali sono questi dettagli (e il tipo di implementa la propria libreria/framework nel farlo).

3

Iniziare con "Inside COM", quindi passare a "Inside DCOM" e quindi leggere "Essential COM". Avrai una presa su COM. Entrambi i libri Inside COM e Inside DCOM sono Microsoft Publications. Libri eccellenti per chi vuole conoscere a fondo il COM/DCOM.

6

ho compilato un elenco di libri, che dovrebbe essere letto in questo ordine:

  1. 'Inside COM' da Dale Rogerson, questo dovrebbe essere il tuo primo libro. Spiega le basi del conteggio dei riferimenti, interfacce, IUnknown, componenti, idl, IDispatch, tipi di automazione e appartamenti. Da questo libro noterai che ci vuole un bel po 'di codice per creare componenti e che puoi facilmente saltare un' Release ', che porta a una perdita di risorse. Anche a questo libro mancano alcuni dettagli.
  2. 'ATL Internals' da Tavares. ATL ti aiuta sia con l'uso del client che come componente COM. Con i puntatori intelligenti (ad esempio CComPtr) è difficile ottenere il conteggio dei riferimenti errato in questi giorni. ATL facilita anche la creazione di componenti in C++. Sfortunatamente ATL nasconde molte funzionalità nelle macro e ha un modo contro-intuitivo per implementare IUnknown. Un'alternativa potrebbe essere "Inside ATL".
  3. 'COM essenziale' da Don Box. Questo libro è menzionato frequentemente, ma non è un buon libro per principianti. Manca l'immagine generale, ma è eccellente nei suoi dettagli (ad esempio la differenza tra "size_is" e "length_is" in idl).
  4. 'Informazioni su ActiveX e OLE: una guida per sviluppatori e manager'. Questo libro tocca alcune delle interfacce più esoteriche come IPersist, IStorage; IMoniker ecc., Ma non entra nei dettagli.

Si noti che COM è in qualche modo una vecchia tecnologia, sebbene ancora fattibile specialmente per gli sviluppatori nativi.