Newsgroup: it.comp.programmare.win32
Titolo: COM e C

Qualcuno conosce l'indirizzo di un sito da cui poter scaricare un corso su
come utilizzare la tecnologia COM in C?
Grazie.

 Grazie.
Se intendi dire scrivere server COM con solo codice C++ e senza l'impiego di
librerie specifiche come ATL credo che in giro esista davvero poco. Fino
all'implementazione delle interfacce base richieste da COM come la IUnknown
e la IDispatch l'impresa non dovrebbe essere particolarmente complessa. Alla
fin fine i server OLE di qualche anno fa non facevano nulla di diverso.
Sull'impiego di ATL dovresti invece trovare sufficiente materiale su
msdn.microsoft.com
.
Bob Rock

 librerie specifiche come ATL
No,no, io sono un pazzo, cerco le cose difficili, io voglio scrivere server
cOM con il C, non con il C++.

 cOM con il C, non con il C++.
Certo che si può fare, del resto si tratta di mappare i metodi descritti
mediante l'IDL sulle tue funzioni C. Tornando alla tua richiesta iniziale
onestamente non conosco siti che offrano tutorial relativi allo scrivere le
interfacce elementari di COM in C puro. A suo tempo avevo scritto un
componente elementare in C++ ed ero riuscito a trovare pezzetti di codice
e/o descrizioni di cosa fare in giro. Credo che qualcosa dovresti poterlo
trovare su 
msdn.microsoft.com
. Buona fortuna.
Bob Rock

Scusate, non sono un esperto di COM (per ora... ;-), magari dico una
scemenza...
Ma se COM si basa su principi quali l'ereditarieta' (di interfaccia, lo so),
come fate a scrivere "oggetti" (o componenti) COM in C??
Il vecchio C non supporta le classi e l'ereditarieta'...
Ciao, Davide.
---------------------
Davide Piras
NRC - CNRC - CANADA
davide...@nrc.ca
---------------------
-- 
Posted from 
origin.vit.iit.nrc.ca
 [132.246.41.10] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 come fate a scrivere "oggetti" (o componenti) COM in C??
Ereditarietą di interfaccia? Onestamente questa mi suona nuova.
Bob Rock


Beh, l'amico Davide, non sa, e si vede, che in C esistono tuttavia le
strutture. Cio che nel C++ è semplificato da una classe, in C è una
struttura, che però è molto complessa da creare. Per un piccolo assaggio
leggere il Technical Article del settembre 1995: The COM Programmer's
Cookbook, nel MSDN.

C/C++ senza librerie? Mhmh, prova a vedere in ogni caso su 
www.codeguru.com
.
Un'altra importante fonte è MSDN.
Lo sviluppo di componenti COM è molto complesso, soprattutto se poi si va
sul RPC e quindi su out of process server. Ti consgilio di svilupparli con
ATL.
Per la loro implementazione bisogna, invece, utilizzare gli smart pointer

Grazie per l'amico, ma cerchiamo di leggere "tra" le righe...
Dire che non so (e che si vede) che il C supporta le strutture solo perche'
scrivo che il C non ha classi ed ereditarieta' mi sembra quantomeno
azzardato (quantomeno...).
Io sono "uno di quelli" che ha imparato il C++ SENZA passare per il C, ma
non per questo non conosco la differenza nell'approccio alle strutture ed
alle classi...
In C le strutture hanno i membri pubblici "by default", in C++ le classi
hanno i membri privati, "by default", ma questo lo sappiamo TUTTI...
La cosa della quale non sono troppo sicuro e' se in C si puo' parlare di
ereditarieta', ovvero non so se in C posso definire una struttura e derivare
da questa altre strutture.
Non conoscendo benissimo COM, non so se si possono creare componenti COM
senza fare uso del concetto di ereditarieta'.
Se il C non permette l'ereditarieta' (tra strutture)
e
Se COM non puo' fare a meno dell'ereditarieta',
FORSE
non si possono scrivere COMponenti col il solo C.
P.S. Se mi rispondi e fai un errore di punteggiatura/lessico/grammatica, io
NON penso che non conosci l'italiano (e che si vede). ;-))
Ciao, buon lavoro, Davide.


Diciamo che il concetto e' uno solo, ereditarieta'.
Se eredito una classe da un'altra, la classe figlia sara' una classe padre
piu' qualcos'altro (sempre che la estenda, altrimenti e' una classe padre
con diverso nome e pochi altri particolari...).
Se la classe padre ha dei metodi implementati che ne definiscono il
comportamento, la classe figli eredita anche questo comportamento per cui,
diciamo che eredita interfaccia (elenco dei metodi), ed implementazione
(contenuto dei vari metodi).
Il paradigma COM, fino ad ora, mi risulta non supporti l'ereditarieta' di
implementazione ma solo quella di interfaccia, per cui un'interfaccia COM
deve essere quella che in C++ si chiama una classe virtuale pura (in Java,
si parla di classi astratte).
Spero di esserti stato d'aiuto, ciao e buon lavoro, Davide.



Premesso che sono Don Box e che quindi quanto stò per dire può non essere
precisissimo, ti garantisco che l'ereditarietà non è affatto necessaria per
sviluppare componenti COM. L'ereditarietà diventa importante nel momento in
cui sviluppi una libreria di classi (vedi ATL) che ti consenta di evitare di
riscoprire ogni volta l'acqua calda. COM è una tecnologia dove esattamente
come in corba si impiega un linguaggio per definire un'interfaccia di quelli
che saranno i servizi che il componente offrirà al mondo esterno, linguaggio
(IDL) che è assolutamente indipendente dal linguaggio che verrà poi
impiegato per implementare tali servizi. Il linguaggio che verrà utilizzato
per l'implementazione potrà o meno essere object-oriented o object-based.
Bob Rock

 Premesso che sono Don Box e che quindi quanto stò per dire può non essere
Ovviamente mi sono dimenticato un bel NON .... NON sono Don Box .... ehm
Bob Rock


Allora, COM si basa sull'aggregazione e sul contenimento. Se leggi il
technical article del settembre 1995 The COM Programmer's Cookbook, leggerai
il codice C e quello C++, notando che il primo sarà molto più ampio.
L'ereditarietà è necessaria con le librerie ATL. In C, ad esempio non si
eredità l'interfaccia IUnknow, bensì si utilizza uno smart pointer. Ti
consiglio comunque di leggerti quell'articolo.

 come fate a scrivere "oggetti" (o componenti) COM in C??
Beh, considera che dopotutto il C++ introduce, attraverso il compilatore,
delle semplificazioni/estensioni che volendo si potrebbero fare anche "a
mano". Ad esempio l'ereditarieta` e il polimorfismo sono realizzate
attraverso la vtable, che e` una normale tavola di puntatori che quindi puoi
gestire anche col C; semplicemente il C++ ti rende tutto trasparente e
automatico. Per COM vale piu` o meno lo stesso discorso; se ti e` mai
capitato di accedere a un oggetto COM da C (mi e` successo quando facevo
esperimenti con DirectX) avrai presente che una funzione membro da C++ si
accedeva come pippo->Membro( ...), mentre da C si accedeva come
pippo->vptr->Membro( pippo, ...).
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/