SlideShare una empresa de Scribd logo
1 de 20
INSTITUTO TECNOLOGICO
SUPERIOR DE COATZACOALCOS
INGENIERIA EN INFORMATICA
ASIGNATURA:PROGRAMACION CLIENTE/SERVIDOR
DOCENTE:I.S.C LIZBETH HERNÁNDEZ OLÁN
TEMA: DCOM Y VISUALC++
ALUMNA: ELIANA VALENTIN RUIZ
GRADO Y GRUPO:7° “B
COM/DCOM y Visual C++
De vez en cuando me toca volver a él para hacer alguna cosilla y voy a aprovechar parra compartir
con vosotros como se hacen (y no se hacen) algunas cositas, hoy relacionadas con el desarrollo
de clientes y servidores de automatización OLE.
Creación del servidor de Automatización OLE
Creamos un nuevo Proyecto
Elegimos una aplicación Visual C++ basada en un diálogo. El echo de que sea un diálogo solo
es para que podamos ver que se arranca al ser invocado como un servidor de automatización y
para que se registren todos los componentes en otra máquina con solo ejecutarlo (lo suyo sería
crearlos como servidores ATL)
Elegimos las opciones de configuración básica.
No se les olvide pinchar la opción de
automatización.
Revisamos los nombres de las clases que se van a generar
Vemos el aspecto de la aplicación y configuramos el diálogo con el editor de recursos
Debemos revisar los componentes creados, sobre todo el señalado (el interfaz) que en nuestro
caso se llamaIdombasico.
Nota:
 Lo importante de la tecnología de componentes es que existe la definición de un
interfaz que define un servicio a ofrecer (en el entorno Microsoft se hace todo tan
automático que gente sin los conceptos claros puede trabajar cómodamente y los
problemas vienen más tarde).
 Un componente en sí es solamente una implementación de ese interfaz (y algunos
otros más).
 Una vez definido un interfaz, este JAMÁS se debe cambiar.
 Es una mala práctica ir añadiendo funciones a un interfaz a medida que lo
necesitamos en un componente que lo implementa.
 Una vez que una aplicación está en producción, nunca se debe cambiar el interfaz
sino crear uno nuevo (que lo amplíe o modifique) y por técnicas de agregación y/o
composición construir un nuevo componente
Añadimos a nuestro interfaz un método
Decimos que retorne una cadena de caracte
Y vemos como ha quedado el interfaz
// dcombasico.idl: código fuente de la biblioteca de tipos para el
archivo dcombasico.exe
// El compilador MIDL procesará este archivo para generar
// la biblioteca de tipos (dcombasico.tlb).
[ uuid(645FB5A1-1591-4B8D-8FA9-
1CBC0D1CC9A5), version(1.0) ]
library dcombasico
{
importlib(“stdole32.tlb”);
importlib(“stdole2.tlb”);
// Interfaz de envío principal para CdcombasicoDoc
[ uuid(DE8D669B-1D2A-41FA-A5A3-9BBA147F02C0) ]
dispinterface Idcombasico
{
properties:
methods:
[id(1), helpstring(“method retornaHora”)] BSTR
retornaHora(void);
Y vemos como ha quedado el interfaz
// dcombasico.idl: código fuente de la biblioteca de tipos para el
archivo dcombasico.exe
// El compilador MIDL procesará este archivo para generar
// la biblioteca de tipos (dcombasico.tlb).
[ uuid(645FB5A1-1591-4B8D-8FA9-
1CBC0D1CC9A5), version(1.0) ]
library dcombasico
{
importlib(“stdole32.tlb”);
importlib(“stdole2.tlb”);
// Interfaz de envío principal para CdcombasicoDoc
[ uuid(DE8D669B-1D2A-41FA-A5A3-9BBA147F02C0) ]
dispinterface Idcombasico
{
properties:
methods:
[id(1), helpstring(“method retornaHora”)] BSTR
retornaHora(void);
};
// Información de clase para CdcombasicoDoc
[ uuid(65360127-D82B-484E-BC54-E6129CDF864C) ]
coclass dcombasico
{
[default] dispinterface Idcombasico;
};
};
El método se ha implementado en nuestra clase encargada de su implementación… que
simplemente retorna la fecha …
BSTR CdcombasicoDlgAutoProxy::retornaHora(void)
{
AFX_MANAGE_STATE(AfxGetAppModuleState());
CString strResult;
// TODO: Add your dispatch handler code here
CTime hora = CTime::GetCurrentTime();
strResult = hora.Format(“%d/%m/%Y”);
return strResult.AllocSysString();
}
Una parte de código que nos interesa … el nombre necesario para crearlo por el cliente por
nombre
// La macro IMPLEMENT_OLECREATE2 se define en el archivo
StdAfx.h de este proyecto
// {65360127-D82B-484E-BC54-E6129CDF864C}
IMPLEMENT_OLECREATE2(CdcombasicoDlgAutoProxy,
“dcombasico.Application”, 0x65360127, 0xd82b, 0x484e, 0xbc,
0x54, 0xe6, 0x12, 0x9c, 0xdf, 0x86, 0x4c)
Creación del cliente
Elegimos una aplicación Visual C++ MFC
Igualmente basada en diálogo
Elegimos las opciones y no marcamos el soporte de automatización
Pero para que funcione el ejemplo necesitamos añadir a mano estas líneas.
BOOL
Cclientedcom.App::InitInstance()
{
……….
// Inicializar bibliotecas OLE
if (!AfxOleInit())
{
AfxMessageBox(“Error
al incializar OLE”);
return FALSE;
}
Creamos un diálogo básico
Y revisamos que nuestro interfaz y servidor que lo implementa están registrados en el
sistema ActiveX Control Test Container (en el menú Tools)
Veamos el dettalle
Y el interfaz en el registro
Ahora añadimos una clase nueva, pinchando el botón derecho del editor
Creamos la clase desde un fichero descrito
Elegimos el componente servidor
Y revisamos el código generado
Y añadimos el código al invocar el botón (no se os olvide incluir el .h):
#include “Cdcombasico.h”
void CclienteligeroDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code
here
COleDispatchDriver disp;
COleException *e = new COleException;
try {
// Create instance of Microsoft System Information
Control
// by using ProgID.
if (disp.CreateDispatch(“dcombasico.Application”,
e))
{
Cdcombasico a = Cdcombasico(disp);
CString x = a.retornaHora()
AfxMessageBox(“Todo ha funcionado ” + x);
}
disp.DetachDispatch();
}
catch (COleDispatchException * e)
{
AfxMessageBox(e->m_strDescription);
e->Delete();
}
}
Y ejecutamos.
Dcom visualC++
Dcom visualC++

Más contenido relacionado

La actualidad más candente

Manual codeblocks luis_ocampo
Manual codeblocks luis_ocampoManual codeblocks luis_ocampo
Manual codeblocks luis_ocampoluis_ocampo27
 
C sharp manual[1]
C sharp manual[1]C sharp manual[1]
C sharp manual[1]Kalizbeth
 
Manual Code::Blocks lenguaje C++
Manual Code::Blocks lenguaje C++Manual Code::Blocks lenguaje C++
Manual Code::Blocks lenguaje C++Santiago Sarmiento
 
Como operar con code...
Como operar con  code...Como operar con  code...
Como operar con code...Luis TC
 
Tutorial de-codeblocks
Tutorial de-codeblocksTutorial de-codeblocks
Tutorial de-codeblockslaura cortez
 
Exclusivo .net
Exclusivo .netExclusivo .net
Exclusivo .net030496
 
Instructivo para utilizar_c++
Instructivo para utilizar_c++Instructivo para utilizar_c++
Instructivo para utilizar_c++heidiromero11
 
Cómo instalar dev c++
Cómo instalar dev c++Cómo instalar dev c++
Cómo instalar dev c++16134817
 
visual basic
visual basicvisual basic
visual basicJesus104
 

La actualidad más candente (17)

Manual codeblocks luis_ocampo
Manual codeblocks luis_ocampoManual codeblocks luis_ocampo
Manual codeblocks luis_ocampo
 
C sharp manual
C sharp manualC sharp manual
C sharp manual
 
C sharp manual[1]
C sharp manual[1]C sharp manual[1]
C sharp manual[1]
 
C sharp manual
C sharp manualC sharp manual
C sharp manual
 
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
 
Manual del dev c++
Manual del dev c++Manual del dev c++
Manual del dev c++
 
Manual Code::Blocks lenguaje C++
Manual Code::Blocks lenguaje C++Manual Code::Blocks lenguaje C++
Manual Code::Blocks lenguaje C++
 
Como operar con code...
Como operar con  code...Como operar con  code...
Como operar con code...
 
Tutorial de-codeblocks
Tutorial de-codeblocksTutorial de-codeblocks
Tutorial de-codeblocks
 
Exclusivo .net
Exclusivo .netExclusivo .net
Exclusivo .net
 
Presentación JavaScript
Presentación JavaScriptPresentación JavaScript
Presentación JavaScript
 
Instructivo para utilizar_c++
Instructivo para utilizar_c++Instructivo para utilizar_c++
Instructivo para utilizar_c++
 
Introducción a Javascript I
Introducción a Javascript IIntroducción a Javascript I
Introducción a Javascript I
 
Cómo instalar dev c++
Cómo instalar dev c++Cómo instalar dev c++
Cómo instalar dev c++
 
visual basic
visual basicvisual basic
visual basic
 
Tutorial de CodeBlocks
Tutorial de CodeBlocksTutorial de CodeBlocks
Tutorial de CodeBlocks
 
primer codigo con C sharp
primer codigo con C sharpprimer codigo con C sharp
primer codigo con C sharp
 

Destacado

Capa de Transporte - Redes de Computadoras
Capa de Transporte - Redes de ComputadorasCapa de Transporte - Redes de Computadoras
Capa de Transporte - Redes de ComputadorasJesus Jimenez
 
ASP, ASP.NET, JSP, COM/DCOM
ASP, ASP.NET, JSP, COM/DCOMASP, ASP.NET, JSP, COM/DCOM
ASP, ASP.NET, JSP, COM/DCOMAashish Jain
 
Dcom vs. corba
Dcom vs. corbaDcom vs. corba
Dcom vs. corbaMohd Arif
 
Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)Peter R. Egli
 

Destacado (9)

Capa de Transporte - Redes de Computadoras
Capa de Transporte - Redes de ComputadorasCapa de Transporte - Redes de Computadoras
Capa de Transporte - Redes de Computadoras
 
Servicios web xml
Servicios web xmlServicios web xml
Servicios web xml
 
Com
ComCom
Com
 
COM and DCOM
COM and DCOMCOM and DCOM
COM and DCOM
 
Presentation On Com Dcom
Presentation On Com DcomPresentation On Com Dcom
Presentation On Com Dcom
 
RPC
RPCRPC
RPC
 
ASP, ASP.NET, JSP, COM/DCOM
ASP, ASP.NET, JSP, COM/DCOMASP, ASP.NET, JSP, COM/DCOM
ASP, ASP.NET, JSP, COM/DCOM
 
Dcom vs. corba
Dcom vs. corbaDcom vs. corba
Dcom vs. corba
 
Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)Component Object Model (COM, DCOM, COM+)
Component Object Model (COM, DCOM, COM+)
 

Similar a Dcom visualC++

Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Luis Fernando Aguas Bucheli
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxLuis Fernando Aguas Bucheli
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Actividad no18 2do_parcial
Actividad no18 2do_parcialActividad no18 2do_parcial
Actividad no18 2do_parcialCarlos Mendoza
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarEduardo Méndez
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarJuan Hoyos
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarblasty2
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarblasty2
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 

Similar a Dcom visualC++ (20)

Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
Cocomo II
Cocomo IICocomo II
Cocomo II
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
 
C sharp manual
C sharp manualC sharp manual
C sharp manual
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Actividad no18 2do_parcial
Actividad no18 2do_parcialActividad no18 2do_parcial
Actividad no18 2do_parcial
 
Tutorial cpl ds v1
Tutorial cpl ds v1Tutorial cpl ds v1
Tutorial cpl ds v1
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Computacion 3808
Computacion 3808Computacion 3808
Computacion 3808
 
Framework
FrameworkFramework
Framework
 
Framework
FrameworkFramework
Framework
 
Clase 7, 11/9/2007
Clase 7, 11/9/2007Clase 7, 11/9/2007
Clase 7, 11/9/2007
 
Com521
Com521Com521
Com521
 
Mvc
MvcMvc
Mvc
 
37975756-Guia-de-C
37975756-Guia-de-C37975756-Guia-de-C
37975756-Guia-de-C
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 

Dcom visualC++

  • 1. INSTITUTO TECNOLOGICO SUPERIOR DE COATZACOALCOS INGENIERIA EN INFORMATICA ASIGNATURA:PROGRAMACION CLIENTE/SERVIDOR DOCENTE:I.S.C LIZBETH HERNÁNDEZ OLÁN TEMA: DCOM Y VISUALC++ ALUMNA: ELIANA VALENTIN RUIZ GRADO Y GRUPO:7° “B
  • 2. COM/DCOM y Visual C++ De vez en cuando me toca volver a él para hacer alguna cosilla y voy a aprovechar parra compartir con vosotros como se hacen (y no se hacen) algunas cositas, hoy relacionadas con el desarrollo de clientes y servidores de automatización OLE. Creación del servidor de Automatización OLE Creamos un nuevo Proyecto Elegimos una aplicación Visual C++ basada en un diálogo. El echo de que sea un diálogo solo es para que podamos ver que se arranca al ser invocado como un servidor de automatización y para que se registren todos los componentes en otra máquina con solo ejecutarlo (lo suyo sería crearlos como servidores ATL)
  • 3. Elegimos las opciones de configuración básica. No se les olvide pinchar la opción de automatización.
  • 4.
  • 5. Revisamos los nombres de las clases que se van a generar
  • 6. Vemos el aspecto de la aplicación y configuramos el diálogo con el editor de recursos Debemos revisar los componentes creados, sobre todo el señalado (el interfaz) que en nuestro caso se llamaIdombasico. Nota:  Lo importante de la tecnología de componentes es que existe la definición de un interfaz que define un servicio a ofrecer (en el entorno Microsoft se hace todo tan automático que gente sin los conceptos claros puede trabajar cómodamente y los problemas vienen más tarde).
  • 7.  Un componente en sí es solamente una implementación de ese interfaz (y algunos otros más).  Una vez definido un interfaz, este JAMÁS se debe cambiar.  Es una mala práctica ir añadiendo funciones a un interfaz a medida que lo necesitamos en un componente que lo implementa.  Una vez que una aplicación está en producción, nunca se debe cambiar el interfaz sino crear uno nuevo (que lo amplíe o modifique) y por técnicas de agregación y/o composición construir un nuevo componente Añadimos a nuestro interfaz un método
  • 8. Decimos que retorne una cadena de caracte Y vemos como ha quedado el interfaz // dcombasico.idl: código fuente de la biblioteca de tipos para el archivo dcombasico.exe // El compilador MIDL procesará este archivo para generar // la biblioteca de tipos (dcombasico.tlb). [ uuid(645FB5A1-1591-4B8D-8FA9- 1CBC0D1CC9A5), version(1.0) ] library dcombasico { importlib(“stdole32.tlb”); importlib(“stdole2.tlb”); // Interfaz de envío principal para CdcombasicoDoc [ uuid(DE8D669B-1D2A-41FA-A5A3-9BBA147F02C0) ] dispinterface Idcombasico { properties: methods: [id(1), helpstring(“method retornaHora”)] BSTR retornaHora(void);
  • 9. Y vemos como ha quedado el interfaz // dcombasico.idl: código fuente de la biblioteca de tipos para el archivo dcombasico.exe // El compilador MIDL procesará este archivo para generar // la biblioteca de tipos (dcombasico.tlb). [ uuid(645FB5A1-1591-4B8D-8FA9- 1CBC0D1CC9A5), version(1.0) ] library dcombasico { importlib(“stdole32.tlb”); importlib(“stdole2.tlb”); // Interfaz de envío principal para CdcombasicoDoc [ uuid(DE8D669B-1D2A-41FA-A5A3-9BBA147F02C0) ] dispinterface Idcombasico { properties: methods: [id(1), helpstring(“method retornaHora”)] BSTR retornaHora(void); };
  • 10. // Información de clase para CdcombasicoDoc [ uuid(65360127-D82B-484E-BC54-E6129CDF864C) ] coclass dcombasico { [default] dispinterface Idcombasico; }; }; El método se ha implementado en nuestra clase encargada de su implementación… que simplemente retorna la fecha … BSTR CdcombasicoDlgAutoProxy::retornaHora(void) { AFX_MANAGE_STATE(AfxGetAppModuleState()); CString strResult; // TODO: Add your dispatch handler code here
  • 11. CTime hora = CTime::GetCurrentTime(); strResult = hora.Format(“%d/%m/%Y”); return strResult.AllocSysString(); } Una parte de código que nos interesa … el nombre necesario para crearlo por el cliente por nombre // La macro IMPLEMENT_OLECREATE2 se define en el archivo StdAfx.h de este proyecto // {65360127-D82B-484E-BC54-E6129CDF864C} IMPLEMENT_OLECREATE2(CdcombasicoDlgAutoProxy, “dcombasico.Application”, 0x65360127, 0xd82b, 0x484e, 0xbc, 0x54, 0xe6, 0x12, 0x9c, 0xdf, 0x86, 0x4c) Creación del cliente Elegimos una aplicación Visual C++ MFC
  • 12. Igualmente basada en diálogo Elegimos las opciones y no marcamos el soporte de automatización Pero para que funcione el ejemplo necesitamos añadir a mano estas líneas. BOOL Cclientedcom.App::InitInstance()
  • 13. { ………. // Inicializar bibliotecas OLE if (!AfxOleInit()) { AfxMessageBox(“Error al incializar OLE”); return FALSE; } Creamos un diálogo básico
  • 14. Y revisamos que nuestro interfaz y servidor que lo implementa están registrados en el sistema ActiveX Control Test Container (en el menú Tools) Veamos el dettalle
  • 15. Y el interfaz en el registro Ahora añadimos una clase nueva, pinchando el botón derecho del editor
  • 16. Creamos la clase desde un fichero descrito Elegimos el componente servidor
  • 17. Y revisamos el código generado Y añadimos el código al invocar el botón (no se os olvide incluir el .h): #include “Cdcombasico.h” void CclienteligeroDlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here COleDispatchDriver disp; COleException *e = new COleException; try { // Create instance of Microsoft System Information Control // by using ProgID. if (disp.CreateDispatch(“dcombasico.Application”, e)) { Cdcombasico a = Cdcombasico(disp); CString x = a.retornaHora()
  • 18. AfxMessageBox(“Todo ha funcionado ” + x); } disp.DetachDispatch(); } catch (COleDispatchException * e) { AfxMessageBox(e->m_strDescription); e->Delete(); } } Y ejecutamos.