2012-04-17 3 views
6

Sono nuovo alla programmazione COM e creazione di una coppia di server/client COM nativi di base da Visual Studio 2010. Sia i progetti client che server vivono nella stessa soluzione. Mi piacerebbe sapere qual è il modo più appropriato per includere lo stub del client generato e il file di intestazione nel progetto client. Ho creato il MIDL nel mio progetto server e quando compilo il progetto i file _h.h, _i.c e _p.c vengono generati nella directory dei sorgenti del progetto.Compilazione stub client COM nativo nel client, utilizzando VS2010

  • Devo compilare entrambi i file .c nel mio progetto client?
  • È il modo migliore per compilarli nel progetto client aggiungendoli come file collegati nel progetto client dalla directory di origine del progetto server?
  • C'è un modo per Visual Studio di sapere che i file _h.h, _i.c e _p.c non sono aggiornati quando modifica il MIDL o devo ricordare di ricompilare il progetto del server in qualsiasi momento Tocco il MIDL?
  • Dov'è il posto migliore per il file .h da percorrere - può andare nel file stdafx.h nel progetto del server? In tal caso, è corretto aggiungere la directory sorgente del progetto server all'intestazione includendo le directory del progetto client?
  • Il progetto client deve avere un "riferimento" (nel senso di riferimento di Visual Studio) al progetto del server?

Inoltre, desidero rendere questa registrazione gratuita. C'è qualcosa in più che devo fare in questo caso, oltre ad avere manifesti per il mio cliente e server?

..

modificare

Guardando l'articolo di MSDN qui: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366830(v=vs.85).aspx, sembra che i file generati, se non voglio sostenere in-process di attivazione reg-libera, solo io è necessario compilare _i.c e includere i file _h.h nel mio programma client.

dlldata.c e _p.c sembrano essere utilizzati per creare una DLL proxy, che supporta la registrazione su un computer remoto (per l'attivazione da un computer remoto? O anche un computer locale, fuori proc? Se richiesto per computer locale, per proc, perché è necessaria dato che dll del server COM è registrato? la DLL server COM è diverso dal DLL proxy, sì?)

Grazie mille,

--Matt

risposta

5

I file _p.c e dlldata.c generati devono essere compilati in un progetto separato per creare la DLL proxy/stub. Non ne hai sempre bisogno, solo quando effettui il marshalling attraverso appartamenti o processi.

Il file _i.c generato fornisce i valori GUID. Compilalo nel server e nel proxy/stub. La compilazione nel client va bene, ma usare la parola chiave __uuidof è più semplice.

Il file _i.h generato contiene le dichiarazioni dell'interfaccia e della coclea. Dovrai # includerlo nel server e nel client.

Midl.exe dovrebbe rigenerare automaticamente questi file quando si modifica .idl. Che a sua volta assicura che client, server e proxy/stub vengano ricostruiti.

stdafx.h va bene, sì nella directory di inclusione.

No al "riferimento", il client e il server non hanno alcuna dipendenza di collegamento.

Dovrai scrivere il manifest per la reg-free com e incorporarlo nel client.

+0

Grazie Hans, lo apprezzo. Per chiarire - ho bisogno del proxy/stub DLL se sto facendo il marshalling tra il MTA e uno STA in un singolo processo sul server? In tal caso, cosa devo fare qui: creo _p.c e dlldata.c in un progetto separato e distribuisco la DLL con il mio client e il server separatamente senza riferimenti tra loro? Inoltre, puoi indicarmi una pagina o una risorsa sulla parola chiave __uuid? Ho trovato [__uuidof] (http://msdn.microsoft.com/en-us/library/zaah6a61 (v = vs80) .aspx), è così? In tal caso, dove ottiene queste informazioni nel client - dal manifest reg-free durante la compilazione? – Matt

+0

Sì e sì. Distribuire e registrare le chiavi CLSID e Interfaccia. È __uuidof, è derivato dalla dichiarazione dell'interfaccia nel file _i.h. –

+0

perché non solo #importare il tlb invece? – deltanine