servicio atl

02/02/2005 - 13:17 por news.microsoft.com | Informe spam
Hola,
Quiero escribir un servicio atl 7.0.
Para ello he añadido el siguiente codigo, al que genera el entorno:
//Controlo la ejecucion d erun
HRESULT PreMessageLoop(int nShowCmd) throw( )

{

HRESULT hr;

hr CAtlServiceModuleT<Cp21Module,IDS_SERVICENAME>::PreMessageLoop(nShowCmd);

if(m_cerrar)

{

hr==1

}

else

{

hr==S_OK

}

if (hr==S_OK && !m_bDelayShutdown)

hr = CoResumeClassObjects();

return hr;

}
//gestiono la cola d emensajes
void RunMessageLoop() throw()

{

MSG msg;

while (! m_cerrar)

{

if(GetMessage(&msg, 0, 0, 0) > 0 )

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

//mis tareas

Sleep(1000);

}


}





Pero el servicio ni se puede parar ni se ejecuta codigo.



Puede alguien ayudarme o pasarme un ejemplo.

Gracias
 

Leer las respuestas

#1 Rodrigo Corral [MVP]
02/02/2005 - 17:32 | Informe spam
Todo depende de lo que quieras hacer:

Los servicios de ATL exponen su funcionalidad en forma de objetos COM lo que
tienes que hacer esa agregar objetos a tu proyecto. Otro tema es si no
necesitas el soporte para exponer objetos COM, lo que tienes que hacer es
definir _ATL_NO_COM_SUPPORT y sobreescribir los metodos de CAtlModule.

Tipicamente se sobreescribe PreMessageLoop para hacer el trabajo que quieras
hacer, por ejemplo abrir un socket que escuche conexiones. Y tambien se
suele sobreescribir OnStop, OnPause... que los llama el SCM cuando paramos o
pausamos el servicio. Por ejemplo...

HRESULT CserviceModule::PreMessageLoop(int nShowCmd)

{

// TODO: Abrir el socket por ejemplo, o cualquier cosa que quieras que haga
tu programa.

return
CAtlServiceModuleT<CserviceModule,IDS_SERVICENAME>::PreMessageLoop(nShowCmd);

}


Si quieres hacer un servicio sin utilizar ATL, a base de API lee: Creating a
Simple Win32 Service in C++ en tu MSDN. Tiene varios
ejemplos que puedes usar como base.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org

Preguntas similares