Anda di halaman 1dari 26

COM/DCOM

COM/DCOM
en C++

Alumno: Francisco ngel Gimeno Domnech Curso 2000/2001 1

COM/DCOM 4 ngeniero !e "elecomunicaci#n

$n!ice !e Con%eni!os
COM/DCOM...............................................................................................1 NDICE DE CONTENIDOS......................................................................2 INTRODUCCIN.......................................................................................3 &' (OCO D) * +"O, A--------------------------------------------------------------------------------. /(O, 0&1 2 (A,A 0&1 COM3------------------------------------------------------------------4 MODELO CLIENTE/SERVIDOR............................................................5
D)'" F CAC 4' D)5 +),6 DO,-----------------------------------------------------------------7 MOD)5O COM-------------------------------------------------------------------------------------------8 D F),)'C A+ )'",) C++ 2 COM-------------------------------------------------------------9 '"),FAC)+ -----------------------------------------------------------------------------------------------: " (O+ D) +),6 DO,)+ COM--------------------------------------------------------------------11

CLIENTES COM EN LA PRCTICA...................................................13 );)M(5O D) C5 )'") COM---------------------------------------------------------------------14 );)M(5O D) +),6 DO, COM------------------------------------------------------------------1: (,O<'DO5O )' D +" '"A+ M0& 'A+--------------------------------------------------2. LTIMAS PALABRAS............................................................................24 BIBLIOGRAFA.......................................................................................25

COM/DCOM

n%ro!ucci#n

)=is%en mul%i%u! !e >i>lio%ecas !e o>?e%os- &na !e las m@s e=%en!i!as es la !e los comAonen%es COM- De hechoB los sis%emas Cin!oDs !e MicrosoE% usan esa %ecnologFa- 2 no s#lo es Gue la usenB sino Gue es%@n >asa!os en comAonen%es COM- COM signiEica ComAonen% O>?ec% Mo!el- COM es un mo!elo- )s un mo!elo b !"# $B Gue Aue!e ser u%iliHa!o in!eAen!ien%emen%e !e los lengua?es !e Arogramaci#n Gue Aue!an soAor%arlo- CO,<A es o%ro !e los mo!elos Gue comAi%e con COM)n es%e !ocumen%o Ieremos como se usanB crean J regis%ran los comAonen%es COM u%iliHan!o un comAila!or !e C++ K usan!o el en%orno !e !esarrollo <orlan! C++ <uil!er LB !e?an!o a un la!o el lengua?e D5 K Aara la !eclaraci#n !e los o>?e%os L&n comAonen%e es un o>?e%o K como los o>?e%o !e las clases !e C++L Gue incluJe unas carac%erFs%icas mFnimasB Aara Gue Aue!an ser u%iliHa!os %an%o en un Arograma como en la e%aAa !e !iseMo !el mismo- )=is%en o%ros mo!elos !e comAonen%es como los mo!elos !e <orlan!B OC5 J 6C5- +in em>argoB s#lo los comAonen%es COM Aue!en u%iliHarse en mNl%iAles lengua?esB !e ahF Gue es%n m@s e=%en!i!os- A!em@sB las !is%in%as Aar%es !el AroAio sis%ema oAera%iIo es%@n realiHa!as con COM- AsFB Aor e?emAloB los menNs con%e=%ualesB las li>rerFas gr@Eicas Direc%OB la creaci#n !e enlaces a EicherosB las !is%in%as aAlicaciones !e MicrosoE% OEEiceB e%c--- son o>?e%os COMB Gue Aue!en ser u%iliHa!os !es!e cualGuier Arograma+in em>argoB la creaci#n !e comAonen%es es algo comAlica!a J %e!iosa- (or ello se suele usar una li>rerFa !e Alan%illas !e macros Gue Eacili%an la %area !e creaci#n !e comAonen%es-

&n Aoco !e his%oria


Cuan!o MicrosoE% es%a>a !esarrollan!o sus Arimeros sis%emas oAera%iIos Cin!oDs se encon%r# con un Aro>lema- 'ecesi%a>an Ao!er .

COM/DCOM inser%ar gr@Eicos !e una !e sus aAlicaciones K MicrosoE% GraAh L en o%ra !e ellas K MicrosoE% (oDer(oin% L- )n 1PP1 !iseMaron un Aro%ocolo me!ian%e el cual en un !ocumen%o Ao!rFan inser%arse o>?e%os man%eni!os Aor Arogramas !is%in%os en los Gue se es%a>a e!i%an!o- )l Aro%ocolo se llama>a O5) 1-0 J se >asa>a en el Aaso !e mensa?es J el uso !e memoria glo>al comAar%i!a)l resul%a!o Eue realmen%e maloB no s#lo Aor la Eragili!a! !el sis%ema K con la caF!a !e una !e las aAlicaciones caFa el sis%ema LB a!em@s !e Gue era muJ comAlica!a la realiHaci#n !e comAonen%es Aara los Arograma!ores5a siguien%e Iersi#n !e O5) K llama!a COM L se rescri>i# !es!e cero Aor MicrosoE% J D)C en un ArinciAio- Al Einal D)C a>an!on# el AroJec%o J MicrosoE% con%inu# con l5as nueIas Iersiones Gue realiH# MicrosoE% amAliaron el mo!elo Aara Ao!er usar los comAonen%es !es!e !is%in%os or!ena!ores K DCOM o Dis%ri>u%e! COM L-

/(or Gu J Aara Gu COM3


COM Iiene inclui!o como Aar%e !e Cin!oDs- )s m@sB muchas Aar%es !e Cin!oDs son o>?e%os COM- +i el Arograma!or Guiere realiHar una extensin !el sis%ema oAera%iIoB %en!r@ Gue realiHar un o>?e%o COM- )l !esarrollo !e un +is%ema OAera%iIo lo realiHan mul%i%u! !e Aersonas)ncon%rar un mo!elo Gue se a!aA%e al !esarrollo glo>al !el sis%ema es !iEFcil- 5a Arogramaci#n orien%a!a a o>?e%os es una al%erna%iIa- COM realiHa es%a Arogramaci#n a niIel !e Arogramas b !"# $%B en con%ra !e lo Gue suele ser normal- )s !ecirB no hace Eal%a %ener los c#!igos Euen%es !el o>?e%o Aara Ao!er usarloDCOM se Aue!e usar en re!es !e una Eorma muJ %ransAaren%eB lo Gue nos Aermi%e la Arogramaci#n a Iarios niIeles(o!emos aAroIechar las Ien%a?as !e las D55s K 5i>rerFas !e )nlace Din@mico L en el mo!elo !e comAonen%es- )n%re es%as Ien%a?as es%@n: Q MinimiHar el uso !e memoria !e Arogramas K al e=is%ir s#lo una coAia !e las Eunciones en memoria L Q 5as ac%ualiHaciones !e las li>rerFas realiHan me?oras so>re %o!os los Arogramas Gue las usan K aunGue es%o es un inconIenien%eB Aues %o!as las nueIas Iersiones !e>en !e ser comAa%i>les 100R con las an%eriores L Q +e Aue!en usar J escri>ir Eunciones !e/!es!e !is%in%os lengua?es !e Arogramaci#n+in em>argoB la ArinciAal !esIen%a?a es la comAle?i!a! !el %ema-

COM/DCOM

Mo!elo Clien%e/+erIi!or
)l uso !e los comAonen%es COM es un claro e?emAlo !e la arGui%ec%ura Clien%e/+erIi!or- )l o>?e%o COM en sF es el serIi!orB J es usa!o Aor un Arograma Gue hace !e clien%e- )=is%en Iarias Eormas !e realiHar la comunicaci#n- (o!emos encon%rar los comAonen%es como Aar%es !e un e?ecu%a>le K como el caso !e los Aro!uc%os !e MicrosoE% OEEiceB o si imAlemen%amos nues%ro AroAio comAonen%e J lo incluimos con un Arograma Gue los use LB !en%ro !e una li>rerFa !e enlace !in@mico K D55 L o incluso en o%ra m@Guina K DCOM L-

!en%iEicaci#n !el serIi!or


)s normal Gue un serIi!or !e comAonen%es con%enga Iarios o>?e%os COM- +e nos Aresen%a un Aro>lema a la hora !e i!en%iEicar Gue comAonen%e Gueremos usar cuan!o el comAonen%e resi!e en un lugar !is%in%o al clien%e K cuan!o Aor e?emAloB el serIi!or COM es%@ Euera !el e?ecu%a>le Gue lo u%iliHa L- &na Aosi>le Eorma !e hacerlo serFa con un nom>re- +in em>argo es%o no es Eac%i>leB Aues 2 Arograma!ores !is%in%os Ao!rFan usar el mismo nom>re Aara comAonen%es !is%in%os K Aor e?emAloB el caso !e un comAonen%e muJ usa!o como un S>o%#nT L5a soluci#n !e MicrosoE% es o%ra- (ara i!en%iEicar cualGuier ScosaT Gue necesi%e una unici!a!B usa una secuencia !e 12: >i%s- )n %eorFaB MicrosoE% !e>erFa !e !ar es%os nNmeros K asF como n%ernic asigna !irecciones (B o los Ea>rican%es !e %ar?e%as !e re! asignan las MAC L- +in em>argoB con 12: >i%s la Aosi>ili!a! !e conElic%o es Ar@c%icamen%e nula K usan!o una Eunci#n Gue nos AroAorciona MicrosoE%B en la Gue genera un nNmero alea%orioB lo meHcla con inEormaci#n !el eGuiAo Gue e?ecu%a la Eunci#nB e%c --- L- )s%a secuencia en general se llama G& D K !en%iEica!or Nnico glo>al L- 5os G& Ds se Aue!en u%iliHar Aara o%ras cosas aAar%e !e los 7

COM/DCOM o>?e%os COM K como Aor e?emAlo Aara i!en%iEicar !isAosi%iIosB !riIersB cone=ionesB comAonen%es--- L- 5os G& Ds u%iliHa!os Aara i!en%iEicar o>?e%os COMB se les !enominan C5+ D K !en%iEica!or !e clase LA la hora !e Arogramar J !e asignar un C5+ D a un o>?e%o COMB MicrosoE% nos AroAorciona un algori%mo Gue garan%iHa la e=clusiIi!a! en el esAacio J en el %iemAoB K 'o se Ian a reAe%ir 2 G& Ds iguales L(or lo %an%oB %ras la creaci#n !e un comAonen%e COMB se le asigna un C5+ D Gue lo i!en%iEicar@ Aara Gue Aue!a ser usa!o Aor los clien%es-

Mo!elo COM
)n el mo!elo cl@sico !e Arogramaci#n orien%a!a a o>?e%os se suele i!en%iEicar al o>?e%o con su in%erEaH- De hechoB es%@ %an uni!a la in%erEaH al o>?e%o Gue se Aue!e !ecir Gue %al o>?e%o es el Gue %iene %ales Eunciones- +in em>argoB el mo!elo COM realiHa la !is%inci#n en%re el o>?e%o J las in%erEaces Gue imAlemen%an- AsFB Aara COM una in%erEaH es un con?un%o !e !eclaraciones !e Eunciones Gue Aue!e o no imAlemen%ar un o>?e%o- 5a !eEinici#n !e n%erEaH es : conjunto de funciones que se ponen a disposicin del pblico. +uelen %ener relaci#n en%re sF- 5as in%erEaces %am>in %iene un G& D K !enomina!o DB o i!en%iEica!or !e in%erEaH L- &n mismo o>?e%o Aue!e imAlemen%ar K J !e hecho lo hace siemAre L Iarias in%erEaces(or e?emAlo: si hicisemos un o>?e%o Aara mo!elar a un hom>reB nos Ao!rFa in%eresar su Eace%a K aGuF usar Eace%a como sin#nimo !e in%erEaH L !e %ra>a?a!orB como AersonaB como ser IiIoB como es%u!ian%eB --- )n ca!a Eace%a nos Aue!e in%eresar una serie !e Eunciones J AroAie!a!es- )s%o en C+ + corresAon!e a una clase a>s%rac%a K ninguna !e las Eunciones es%@n !eEini!as L- (or esoB ca!a o>?e%o Aue!e imAlemen%ar li>remen%e es%as Eunciones6eamos m@s en AroEun!i!a! el e?emAlo so>re las Eace%as: AsFB como %ra>a?a!or un hom>re Aue!e cobrarB trabajarB faltar al trabajo K los m%o!os !e la in%erEaH &#"b"'"($# !el o>?e%o hom>re L B J %ener un sueldoB un jefeB un puestoB un horario K las AroAie!a!es !e la in%erEaH &#"b"'"($# L+in em>argoB un hom>re hace algo m@s Gue %ra>a?ar- Como )*#%$!" Aue!e divertirseB salir a pasearB J %iene amigosB padresB cnyuge--- 2 asF con las !em@s in%erEaces)n !e%ermina!os con%e=%os nos in%eresar@n unas carac%erFs%icas K los m%o!os J AroAie!a!es L J o%ras Ieces no- De hecho no %o!o %*# + +$B es un hom>re- (or lo %an%oB las acciones comunes a %o!os los seres IiIos no !e>erFan es%ar !eclara!as Aara el hom>reB J %am>in Aara las Alan%asB J Aara los animales- <as%arFa con sa>er Gu es un %*# + +$ K Gue m%o!os J AroAie!a!es %iene L J !ecir Gue el hom>re es un ser IiIo K es !ecirB Gue imAlemen%a esa in%erEaH L -

COM/DCOM

DiEerencias en%re C++ J COM


COM es !is%in%o a C++- 5os o>?e%os COM son >as%an%es m@s comAlica!os- Muchas !e es%as comAlicaciones Iienen !el hecho !e la arGui%ec%ura Clien%e/+erIi!or Gue se Aue!e realiHar a %raIs !e re!es- *aJ cua%ro consi!eraciones >@sicas Gue !iEerencian a C++ J COM: Q 5os o>?e%os en C++ siemAre se e?ecu%an en el mismo Aroceso- 5os o>?e%os COM Aue!en e?ecu%arse es%an!o el clien%e en o%ro Aroceso Gue el serIi!orB o incluso en o%ro or!ena!orQ 5os m%o!os !e los o>?e%os COM se Aue!en llamar a %raIs !e una re!Q 5os nom>res !e los m%o!os !e C++ !e>en !e ser Nnicos en el Aroceso J los nom>res !e los m%o!os !e COM !e>en !e ser Nnicos en el mun!oQ 5os serIi!ores COM Aue!en ser escri%os en Iarie!a! !e lengua?es J en sis%emas oAera%iIos !is%in%osB mien%ras Gue los o>?e%os escri%os en C++ son siemAre escri%os en C++AsF AuesB con C++ Ao!emos escri>ir o>?e%os COMO%ro asAec%o in%eresan%e es el !e la creaci#n !e o>?e%os- )n C++ es el clien%e el Gue asigna la memoria Aara el o>?e%o J el cons%ruc%or !e s%e %ermina Aor reserIar memoria Aara sus miem>ros- )n un o>?e%o COMB al Ao!er crearse o>?e%os remo%amen%e !e>e !e e=is%ir un mecanismo Aara la creaci#n !el o>?e%o a !is%ancia J o%ro Aara la comunicaci#n- )n el Arimer casoB es el serIi!or COM el Gue realiHa la ges%i#n !e memoria J C5+ DV *om>re

O<;)"O *OM<,)
'"),FAU ",A<A;ADO , Co>rar "ra>a?ar Fal%ar +uel!oB ?eEeB horarioB Aues%o '"),FAU *OM<,) DiIer%ir +alir a Aasear AmigosB Aa!res--'"),FAU +), 6 6O ,esAirar 6iIir )!a!

Funciones J (roAie!a!es DV *om>re DV "ra>a?a!or

DV +er6iIo

COM/DCOM cons%rucci#n !el o>?e%o- )n el segun!o casoB la comunicaci#n se realiHa !e Eorma %ransAaren%e al usuarioB ges%iona!o Aor el sis%ema oAera%iIo-

n%erEaces
+on Aar%e Eun!amen%al !el mo!elo- )s%e conceA%o no e=is%e en C++5as !&*#,"-*% en C++ se imAlemen%an como clases- DeriIan %o!as ellas !e la in%erEaH &nWnoDn- 5a Aar%iculari!a! !e las !&*#,"-*% es Gue son clases a>s%rac%asB es !ecirB no !eEinen ninguna !e las Eunciones Gue !eclaran- (or lo %an%oB una in%erEaH es una clase Gue con%iene un !e%ermina!o nNmero !e Aun%eros a Eunciones K %o!as ellas en la %a>la !e m%o!os Iir%uales 6M" L)s el AroAio o>?e%o COM el Gue %iene Gue imAlemen%ar las Eunciones)l usuario K clien%e L !.!-" +" " )$(*# &#"&"# -$! */ $b'*&$ ( #*-&"0*!&*- "en!r@ Gue hacerlo a %raIs !e sus in%erEaces- (or lo %an%oB el usuario %en!r@ un Aun%ero a esa in%erEaH J Ao!r@ llamar a los m%o!os Gue !eclara la AroAia in%erEaH K J es%ar@n !eEini!as Aor el o>?e%o COM Gue imAlemen%e !icha in%erEaH LCuan!o el usuario crea un o>?e%oB o>%iene un Aun%ero a la in%erEaH &nWnoDn- )s%a in%erEaH !e>er@ AroAorcionar las Eunciones necesarias Aara Ao!er usar o%ra in%erEaH- Ca!a o>?e%o COMB !e>er@ imAlemen%ar una serie !e Eunciones mFnimas Gue garan%ice la Euncionali!a! !el mismo-

COM/DCOM

n%erEaH &nWnoDn
Como an%es hemos Iis%oB %o!a in%erEaH !eriIa !e &nWnoDn- 6eamos un Aoco m@s en AroEun!i!a! es%a clase-

+i nos Ei?amos en es%e gr@EicoB haJ una in%erEaH Gue aAarece arri>a)sa serFa Aor la Gue en%rarFamos al O>?e%o COMB la Gue hemos llama!o &nWnoDn5a !eclaraci#n !e es%a in%erEaH en lengua?e D5 K n%erEace DescriA%ion 5anguage L es: [ local, object huid(00000000-0000-0000- 000-0000000000!"# pointer_default(unique# $ interface %&n'no(n ) *+,-&./ 0uery%nterface ( [in$ +,1%%2 riid3 [out3 iid_is(riid#$ void 44ppv5bject#6 &.578 9dd+ef(#6 &.578 +elease(#6 : Como COM !e>e ser in!eAen!ien%e !el lengua?eB !e>e e=is%ir al menos un lengua?e neu%ro Aara !eEinir las es%ruc%urasB las Eunciones J los AroAios o>?e%os- MicrosoE% u%iliHa una Iarian%e !el D5 emAlea!o Aor ,(C K ,emo%e (roce!ure Call LB eso sFB orien%a!o a o>?e%os- A Aar%ir !e es%e lengua?e serFa Aosi>le o>%ener las !eclaraciones en !is%in%os lengua?es !e Arogramaci#n Aara Gue Au!ieran ser usa!os+i nos Ei?amos en la !eclaraci#n !e es%a in%erEaHB Iemos . m%o!os: 0uerJ n%erEaceKLB A!!,eEKL J ,eleaseKL- )l Arimero !e ellos se usa Aara la P

COM/DCOM in%rosAecci#n- &n o>?e%o COM es una ca?a negra K m@s negra Gue !e cos%um>re L- )n ArinciAioB al crear un o>?e%oB s#lo %en!remos acceso a su in%erEaH &nWnoDn- )l Gue %o!os los o>?e%os imAlemen%en es%a in%erEaHB no signiEica Gue sean iguales- )n generalB &nWnoDn Euncionar@ !e un mo!o u o%ro segNn el o>?e%o Gue haJamos crea!o- 0uerJ n%erEace sirIe Aara Ae!ir un Aun%ero a o%ra in%erEaH !el mismo o>?e%o- +iemAre Eunciona !e la misma manera: se le Aasan !os Aar@me%rosB el Arimero es el D K recor!emos Gue era el i!en%iEica!or !e in%erEaH L !e la in%erEaH Gue Gueremos o>%enerB J !e segun!o Aar@me%ro un Aun%ero a Aun%ero a esa in%erEaH- (or e?emAlo: o reate%nstante ( .-%2;5bjeto<3 7&..3 .- /=;9..3 %%2;%&n'no(n3 (void 44# >%nterfa?<#6 %nterfa?<-@0uery%nterface ( %%2;%nterfa?A3 ( void 44 # >%nterfa?A #6 Con n%erEaH1 un Aun%ero a la in%erEaH &nWnoDn J n%erEaH2 un Aun%ero a cualGuier o%ra in%erEaH !el o>?e%o crea!o- DesAus !e e?ecu%ar es%as lFneasB %en!remos en n%erEaH2 un Aun%ero a la in%erEaH DV n%erEaH2 !el O>?e%o1B J Ao!remos usar las Eunciones corresAon!ien%es !e es%a in%erEaH)n es%e AeGueMo e?emAlo se Ie Gue los o>?e%os COM es%@n !iseMa!os Aara o%ros lengua?es aAar%e !el C++- Al segun!o Aar@me%ro !e 0uerJ n%erEace haJ Gue hacerle un cas% >as%an%e EorHa!o K Ioi! XX LB cuJo uso en C++ es%@ muJ !esaconse?a!oA con%inuaci#nB un gr@Eico nos mues%ra o%ra Eorma !e Ier los o>?e%os COM- )l o>?e%o COM es la ca?aB J ca!a una !e las in%erEaces son los Aaneles- Ca!a (anel %iene a!em@s un con?un%o !e >o%ones Gue son las Eunciones-

10

COM/DCOM (ero a!em@sB como %o!as las in%erEaces !eriIan !e &nWnoDnB %o!as !e>en imAlemen%ar las . Eunciones 0uerJ n%erEaceB A!!,eE J ,elease- AsFB !es!e ca!a in%erEaHB Ao!emos o>%ener un Aun%ero a cualGuiera !e las o%ras in%erEacesCon resAec%o a las o%ras !os EuncionesB sirIen Aara con%rolar el %iemAo !e Ii!a !e ca!a o>?e%o COM- )s%o se usa Aara li>erar al o>?e%o COM !e la memoria-

"iAos !e serIi!ores COM


An%eriormen%e hemos Iis%o Gue e=is%en Iarios %iAos !is%in%os !e serIi!ores COM- )n%re ellos es%@n los o>?e%os COM Gue se Salo?anT en D55sB los Gue se alo?an en un e?ecu%a>le J los Gue se ale?an en o%ra m@Guina !e una re!- 6amos a Ier el Aro>lema !e la comunicaci#n en%re clien%e J serIi!or K Aara el Aaso !e Aar@me%ros L-

+erIi!ores COM en D55


)s%a es la Eorma m@s sencilla !e Euncionamien%o !el mo!elo COMClien%e J +erIi!or comAar%en un esAacio !e !irecciones J un maAa !e memoria- 5a carga !el o>?e%o COM !es!e el D55 se hace !e Eorma %ransAaren%e al usuario- 5a comunicaci#n se Aue!e realiHar con el Aaso !e Aar@me%ros normal Ei?a!o Aara una D55 K incluJen!o eso sFB como Aar@me%ros %am>inB un Aun%ero a la ins%ancia !el o>?e%o L)s el Arograma clien%e el Gue realiHa la creaci#n !e memoria Aara comenHar la creaci#n !el o>?e%o COM- Al en%rar en e?ecuci#n el cons%ruc%or !el o>?e%oB s%e Ao!rFa realiHar Ae%iciones !e memoria !in@mica-

+erIi!ores COM en )O)


+on llama!os serIi!ores locales- +e e?ecu%an en el mismo or!ena!or Gue el clien%eB Aero en Arocesos !is%in%os- 5a comunicaci#n la ges%iona el sis%ema oAera%iIo- 'o hace Eal%a Gue es% el e?ecu%a>le !el serIi!or Euncionan!oB Aues el sis%ema es caAaH !e e?ecu%arlo- )l Se=eT con%iene una Aar%e Gue se encarga !e la ges%i#n !e memoria inicial Gue reGuieren los o>?e%os COM-

+erIi!ores COM remo%os o DCOM


Clien%e J serIi!or se encuen%ran en or!ena!ores !is%in%os- 5a comunicaci#n la ges%iona el sis%ema oAera%iIo- n%ernamen%eB MicrosoE% usa el Aro%ocolo ,(C Aara realiHar la comunicaci#n- +in em>argoB el Arograma serIi!or !e>e !e es%ar e?ecu%@n!oseA la hora !e la Ar@c%icaB haJ Aoca !iEerencia en la Arogramaci#n- 5as Eunciones miem>ro se llaman !e la misma EormaB los o>?e%os se crean Ar@c%icamen%e igual K en serIi!ores remo%os se usa la Eunci#n o reate%nstance,xB la cual %iene un Aar@me%ro Gue i!en%iEica al or!ena!or 11

COM/DCOM serIi!or L- (eroB si los o>?e%os se usan igualB /c#mo se Aue!e conseguir en%onces el eEec%o !e llama!as a Eunci#n3- )s !ecirB /como Ao!rFa usarse3 5bjeto<-@1uncion< ( parametros #6 )l clien%e no %iene cons%ancia en%onces !e Gue %iene es%a>lecer una cone=i#n Aor re!- )s el sis%ema oAera%iIo el Gue %iene Gue Aoner un )#$12 Gue SsimuleT Gue las Eunciones es%@n accesi>les- 2 la llama!a a la 1uncion< realmen%e es%ar@ llaman!o a una Eunci#n local ges%iona!a Aor el sis%ema oAera%iIo Gue realice la comunicaci#n con el o%ro e=%remo-

12

COM/DCOM

Clien%es COM en la Ar@c%ica


)mAieHa a ser hora Ja !e Ier algo !e c#!igo- 5o Arimero Gue Ieremos es la o>%enci#n !e un o>?e%o COM- (ara elloB usaremos una llama!a al A( !e Cin!oDsB CoCrea%e ns%an%e- +u !eclaraci#n es la siguien%e:
STDAPI CoGetClassObject( REFCLSID rclsid, //CLSID asociado al objeto DWORD dwClsContext, //Contexto del cliente COSERVERINFO * pServerInfo, //Puntero a una maquina en la que el objeto va a //ser instanciado REFIID riid, // eferencia al identificador de la interfa! // LPVOID * ppv //Direcci"n del puntero que recibe la interfa! );

6eremos Arimero c#!igo !el uso !e un clien%e Ja hecho J luego Ieremos la imAlemen%aci#n !el serIi!or- 5os e?emAlos los he realiHa!o con 2 comAila!ores !is%in%os- &s el MicrosoE% 6isual C++ 8-0 Aara la realiHaci#n !e los serIi!oresB Aues gracias a sus Se=Aer%osTB la realiHaci#n !e un serIi!or COM se limi%a a la imAlemen%aci#n !e las Eunciones Gue imAlemen%e- (ara realiHar los clien%esB us el <orlan! C++ <uil!er 7B Aues es una herramien%a !e !esarrollo ,AD K *erramien%as !e Desarrollo ,@Ai!o L Gue Eacili%a en gran me!i!a la realiHaci#n !e los e?emAlos-

1.

COM/DCOM

)?emAlo !e Clien%e COM


)n es%e e?emAlo Ieremos c#mo crear un o>?e%o COM local- Mi in%enci#n no es la !e e=Alicar %o!os los AasosB sino Ierlo Aor encima J !es%acar los asAec%os m@s imAor%an%es)n C++ <uil!er se Aue!en crear aAlicaciones E@cilmen%e- 5a Arogramaci#n se >asa en Fichas K Form L- )=is%e una gran can%i!a! !e comAonen%es Iisuales Gue Iienen con el AaGue%e !e !esarrollo- )s%os comAonen%es son o>?e%os normales !e C++B Aero en los Gue %o!os !eriIan !irec%a o in!irec%amen%e !e la clase /5bject- )s%os comAonen%es son las Ien%anasB los >o%onesB los accesos a >ases !e !a%osB las lis%asB los gr@EicosB e%c--)n nues%ro e?emAloB usaremos la Eicha Gue Iiene Aor !eEec%o- 5a mo!iEicaremos J le aMa!iremos un >o%#n Aara realiHar la acci#n-

*acien!o Do>le ClicW con el >o%#n iHGuier!o !el ra%#nB se nos a>rir@ una Aan%alla !e e!ici#n !e c#!igo Euen%e- )l cursor se Aosiciona %ras la llaIe !e una Eunci#nB in!ic@n!onos Gue se ser@ el c#!igo Gue se e?ecu%ar@ cuan!o se Aulse el >o%#n K realmen%eB es la resAues%a Gue !a la Eicha al eIen%o 5n lic' !el >o%#n L- )l c#!igo in%ro!uci!o es el siguien%e:

14

COM/DCOM

+in em>argoB %o!aIFa no es suEicien%e Aara Gue Euncione- (ues hemos usa!o .-%2;-aludo3 %%2;%-aludo e %-aludo en nues%ro c#!igo- )l comAila!or no SconoceT esas esas reEerencias ni la clase %-aludo&na IeH Gue el o>?e%o COM es%@ en nues%ro sis%emaB es%@ almacena!o en el regis%ro !e Cin!oDs !a%os acerca !e l- )sos !a%os son Aor e?emAlo su C5+ DB los D !e las in%erEaces Gue soAor%aB la localiHaci#n !el Eichero !on!e resi!e K -D55 o -)O) L o los or!ena!ores !e la re! en los Gue es%@ !isAoni>le ese o>?e%o5os comAila!ores con soAor%e !e COM %raen una u%ili!a! Aara e=%raer es%a inEormaci#n K J m@sB como la !eclaraci#n !e las in%erEaces L a Aar%ir !el regis%ro !e Cin!oDs-

17

COM/DCOM

D@n!ole a reate &nit genera 2 Eicheros K uno .cpp J o%ro .h L con los !a%os necesarios Aara el Arograma-

+DCOM15i>V"<5-cAA
BB CC /.DE+/+ F G+evisionF <.<H!.<.!< G BB 1ile generated on A"B0HBA00< AFI0F!" from /ype .ibrary described belo(. BB 444444444444444444444444444444444444444444444444444444444 BB BB /ype .ibF FJK+5L, /5J 5MJ-2 5M<J2,D&8J-2 5M<.2.. (<# BB %%2J. %2F )1 ! N2<O-O0, -!AON-N""N-12O<A!<H29"2:J0 BB *elpfileF BB 2epnd.stF BB (<# vA.0 stdole3 ( FJE%725E-J-L-/,MJ-td5leA./lb# BB (A# v!.0 -tdP .3 ( FJE%725E-J-L-/,MJ-/2P .!0.2..# BB 444444444444444444444444444444444444444444444444444444444 BB Qinclude Rvcl.h@ Qpragma hdrstop Qinclude S-2 5M<.ib;/.D.hS Qif Tdefined(;;K+98M9;K9 U98,;-M9+/;%7%/# Qdefine ;;K+98M9;K9 U98,;-M9+/;%7%/ 18

COM/DCOM Qpragma pac'age(smart;init# Qendif namespace -dcom<lib;tlb ) BB 444444444444444444444444444444444444444444444444444444444BB BB 8&%2- declared in the /ype.ibrary BB 444444444444444444444444444444444444444444444444444444444BB const 8&%2 .%D%2;-2 5M<.ib V )0x1 ! N2<O3 0xO0, 3 0x!AON3 ) 0xN"3 0x"N3 0x123 0xO<3 0xA!3 0x<H3 0x293 0x"2: :6 const 8&%2 .-%2;-aludo V )0x"DO990"I3 0xN1293 0x!2 "3) 0x9 3 0xDD3 0xWO3 0x!H3 0xH,3 0xDH3 0x,,3 0x2O: :6 const 8&%2 %%2;%-aludo V )0xOWH,,2IW3 0x01"23 0x!<AW3) 0xOW3 0xND3 0x1!3 0xD23 0x 03 0x<03 0xH!3 0xDO: :6 :6 BB namespace -dcom<lib;tlb

)"#&* (*/ SDCOM1L b3TBL.4


BB 4444444444444444444444444444444444444444444444444444444444BB BB %nterfaceF %-aludo BB 1lagsF (0# BB 8&%2F )OWH,,2IW-01"2-!<AW-OWND-1!D2 0<0H!DO: BB 44444444444444444444444444444444444444444444444444444444444BB interface %-aludo F public %&n'no(n ) publicF BB [-<$ method +ecibir virtual *+,-&./ -/2M,/*52 9../LK, +ecibir(long horaB4[in$4B# V 06 :6 Como se Aue!e o>serIarB el c#!igo genera!o Aor el mAor%a!or !e 5i>rerFas !e "iAoB ha e=%raF!o la inEormaci#n !el o>?e%o COM Gue nos in%eresa- AhoraB lo Nnico Gue Gue!a hacer es incluir es%e Eichero !e ca>ecera en el Eichero !el c#!igo !e la Eicha- +e comAilaB J si %o!o Ia >ienB !e>erFa Euncionar-

19

COM/DCOM )n es%e gr@Eico se mues%ra la Ien%ana !el Arograma clien%eB al Eon!oB J la Ien%ana !el serIi!or Gue luego Arogramaremos al Eren%e-

)?emAlo !e +erIi!or COM


5a creaci#n !e un serIi!or COM Aue!e llegar a ser una %area comAle?a- +in em>argoB los nueIos en%ornos !e !esarrollo in%en%an suaIiHar es%a %area- (ara hacer el serIi!or u%ilic o%ro AaGue%e !is%in%oB el 6isual C++ 8-0B el cual %rae Ei?ards Aara la creaci#n !e o>?e%os COM- 5a realiHaci#n !e es%e o>?e%o no en%raMa !iEicul%a!B Aues s#lo %iene una in%erEaH K aAar%e !e %&n'no(n LB Gue a!em@s s#lo con%iene un m%o!oB ,eci>irKYinZ long *oraL+i ha o>serIa!o >ienB la !eclaraci#n !el m%o!o %iene un 5 !6 !elan%e !el Aar@me%roB lo cual signiEica Gue es un Aar@me%ro !e en%ra!a K Ier la !ocumen%aci#n ,(C al resAec%o L- 5o Gue !eIuelIe la Eunci#n es un *,)+&5" Gue nos !ir@ si la llama!a a la Eunci#n Eue correc%a o no- +i lo Gue Gueremos es %ener Aar@me%ros !e sali!aB >as%a con esAeciEicar 5$.&7 #*&+"/ 6(uesB manos a la o>ra- Al seleccionar !*8B !el menN F /*B %en!remos es%o:

+eleccionaremos ATL COM A))9 :"#(B J con%inuaremos,ealmen%eB es%o no es el o>?e%oB sino una aAlicaci#n Gue con%en!r@ los o>?e%os COM-

1:

COM/DCOM

Crearemos un Eichero E;EB Aara Ao!er usarlo remo%amen%e K recor!emos Gue el serIi!or remo%o !e>e !e es%ar a la escucha !e las Ae%icionesB J Aor lo %an%o Euncionan!o L- &na IeH !a!o a F ! %4B Ao!remos Ier en el insAec%or !e clases lo siguien%e:

)s%as clasesB m%o!os J !a%os miem>ros los crea au%om@%icamen%e el en%orno- Con%iene c#!igo Aara regis%rar J >orrar el o>?e%o !el ,egis%ro !e Cin!oDsB Aara crear los o>?e%os COMB Aara crear los hilos !e e?ecuci#n !e los o>?e%osB e%c- )l en%orno %am>in ha crea!o una clase llama!a C)=eMo!uleB Gue no es m@s Gue el Gue se encarga !e ges%ionar J crear los !is%in%os o>?e%os COM Gue Aue!e al>ergar el serIi!or-

1P

COM/DCOM Como !i?imos an%eriormen%eB un serIi!or COM Aue!e con%ener Iarios o>?e%os- Ahora Iamos a crear un o>?e%o COM- (ara elloB haremos clic' con el >o%#n !erecho !el ra%#n encima !el AroJec%oB en el Iisor !e clases J seleccionaremos N*8 ATL Ob'*-&. -

+egui!amen%eB nos aAarecer@ una Ien%ana como es%a: )n es%a Ien%ana

seleccionaremos el %iAo !e O>?e%o COM Gue Iamos a crear- &saremos un o>?e%o simAle K S 0)/* Ob'*-& L-

20

COM/DCOM

2 una IeHB Gue le !emos a aceA%arB %en!remos casi %o!o el %ra>a?o hecho- +#lo nos Gue!a aMa!ir un m%o!o J %en!remos el o>?e%o lis%o Aara comAilarloAhora en el 6isor !e Clases nos aAarece es%a clase Gue hemos crea!oB con una in%erEaH Aor !eEec%o !el mismo nom>reB Aero emAeHan!o Aor -

'os Gue!a aMa!ir el nueIo m%o!oB J Aara ello IolIemos a Aulsar con el ra%#nB con el >o%#n !erechoB encima !e la in%erEaH +alu!o J seleccionaremos A(( M*&4$(.

21

COM/DCOM

J aMa!imos el nom>re !el m%o!oB con su Aar@me%ro !e en%ra!a-

"ras !arle a O<7 en nues%ro c#!igo aAarecer@n unas lFneas nueIas-/2M,/*52%MK -aludoFF+ecibir(.578 hora# ) BB /525F 9dd your implementation code here return -;5U6 : 22

COM/DCOM n%ro!uciremos un AeGueMo c#!igo Gue haga aAarecer una Ien%ana en el +),6 DO,B en la Gue mues%re el Ialor Gue ha reci>i!o-/2M,/*52%MK -aludoFF+ecibir(.578 hora# ) char 4mensaje V ne( char[I0$6 sprintf(mensaje3 SMe han llamado con el numeroF XdS3 num#6 FFMessageDox(7&..3 mensaje3 SPentana del -ervidorS3 MD;5U #6 delete [$ mensaje6 return -;5U6 : 2 Ja solo Gue!a comAilar J Aro>ar- 6isual C++ %ras la comAilaci#nB regis%ra el o>?e%o Aara Gue Aue!a ser usa!o Aor o%ros Arogramas-

(ro>@n!olo en !is%in%as m@Guinas


"al como es%@ hechoB es%e o>?e%o COM Eunciona sin Aro>lemas en la misma m@Guina- (ara hacer Gue Euncione en%re 2 m@Guinas !is%in%asB se Aue!e oA%ar Aor 2 soluciones1L &sar el Arograma (-$0-!,=

2L Cam>iar el c#!igo !el clien%e Aara Gue seAa l mismo localiHar al o>?e%oB usan!o la Eunci#n C$C#*"&*C/"%%E1 en IeH !e C$C#*"&*C/"%%2.

COM/DCOM

[5" MA+ (A5A<,A+


Aca>o es%e >reIe !ocumen%o aNn sa>ien!o Gue Gue!an muchasB muchFsimas cosas en el %in%ero- AAenas mencion el Aaso !e Aar@me%rosB ni los usos Gue se Aue!en !arB ni e=AliGu c#mo Eunciona>a el Aro=J--- (or no mencionar Gue no he ha>la!o na!a !e Ac%iIeOB ni !e la Eac%orFa !e o>?e%osB ni --+o>re las Euncionali!a!esB me Eal%a comen%ar Gue el mo!elo COM es usa!o en las aAlicaciones multi tier !e <ases !e Da%os-

24

COM/DCOM

< <5 OG,AF$A

Documen%os elec%r#nicos: MicrosoE% M+D'- ,eEerencia oEicial !e los crea!oreso h%%A://ms!n-microsoE%-com/DorWshoA/comAonen%s/%oc-h%m o h%%A://ms!n-microsoE%-com/DorWshoA/comAonen%s/com/%u%orial /lessons-asA o h%%A://ms!n-microsoE%-com/li>rarJ/!eEaul%-asA K <ooWsB nsi!e O5) L &n!ers%an!ing DCOM- B Cilliam ,u>in J Marshall <rain- 6arios ar%Fculos con e?emAlos Ar@c%icos en MicrosoE% 6isual C++o h%%A://?ournal-iE%ech-com/ar%icles/!comV1/ o h%%A://?ournal-iE%ech-com/ar%icles/!comV2/ o h%%A://?ournal-iE%ech-com/ar%icles/!comV./ 5a cara ocul%a !e C++ <uil!er 4B an Mar%eens- )=celen%e li>ro so>re Arogramaci#n en Cin!oDso h%%A://DDD-mar%eens-com/"he DarW +i!e oE CAA>-HiA X +un MicrosJs%emsB nc- ,(C: ,emo%e Aroce!ure call Aro%ocol sAeciEica%ion- %nternet Eor'ing 8roup +equest for omments3 K ,FC 1079B AAril 1P::\ ,FC 1:.1B Agos%o 1PP7 L 5i>ros: Francisco Char%e- Krogramacin 9van?ada con CC Duilder !AnaJa Mul%ime!ia K +<' :4Q417Q0:80Q9 L- )?emAlos !e clien%esFrancisco Char%e- Krogramacin avan?ada en Eindo(s ON- AnaJa Mul%ime!ia K +<' :4Q417Q0:.2Q1 L- )?emAlos !e clien%es-

27

COM/DCOM an Mar%eens- .a cara oculta de 2elphi- DanJsoE% n%ernacional K +<' :4Q2:.QPPPPQPL- )?emAlos J %eorFa !e clien%es J serIi!ores COMFrancisco ;aIier Ce>allos- (rogramaci#n orien%a!a a o>?e%os con C+ + K +<' :4Q9:P9Q28:Q4 L- Cuan!o se o>scurece el mun!o !e la Arogramaci#n orien%a!a a o>?e%os IuelIo a es%e li>ro- &n li>ro !e reEerencia !e C++ escri%o Aor un na%iIo !el cas%ellano-

28

Anda mungkin juga menyukai