• Sábado 5 de Julio de 2025, 21:21

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - killrazor

Páginas: [1]
1
C/C++ / Serializar variables
« en: Viernes 12 de Marzo de 2010, 11:39 »
Hola,

estoy intentando serializar las variables dentro de una clase. La clase tiene una funcion asi:

Código: C++
  1. void serialice(unsigned char* data)
  2. {
  3.     long a = 33;  //variables de ejemplo
  4.     int b = 44;
  5.     long* pA = &a;
  6.     int* pB = &b;
  7.  
  8.     static_cast<long*>(data)++ = *pA;
  9.     static_cast<int*>(data)++ = *pB;
  10. }
  11.  

Pero me da errores. Creo que no estoy muy lejos, pero me estoy dejando algo. Me podeis dar una manita please?

2
C/C++ / Funciones virtuales y herencia
« en: Viernes 29 de Enero de 2010, 10:19 »
Hola,

hay algo que no entiendo sobre las funciones virtuales. Si yo tengo estas clases:

Código: C++
  1. class Base{
  2.     public:
  3.         void func(int a){ cout << "Estoy en la clase Base" << endl;}
  4. };
  5.  
  6. class Derivada:public Base{
  7.     public:
  8.         void func(int a){ cout << "Estoy en la clase Derivada" << endl;}
  9. };
  10.  
  11. int main(){
  12.     Base a;
  13.     a.func(0);
  14.     Derivada b;
  15.     b.func(0);
  16.     return EXIT_SUCCESS;
  17. }
  18.  
Sin necesidad de poner la palabra clave virtual, la salida de b.func() seria "Estoy en la clase derivada". Entonces para que sirve la palabra clave virtual? Yo pensaba que si no poniamos virtual, la funcion de la clase derivada quedaba oculta.

3
C/C++ / Extraño comportamiento de destructor
« en: Domingo 11 de Octubre de 2009, 17:26 »
Hola a todos.
Estoy haciendo una clase que usa un Log para guardar mensajes. Lo
extraño es que tal como se crea la clase, automaticamente se llama al
destructor. El codigo del main es este:

Código: C++
  1. int main(int argc, const char* argv[]){
  2.        //Aqui creo un logger
  3.        CGeneralLogger glogger =
  4. CGeneralLogger("Log333.txt",tools::GLog::LOGLEVEL_DEGUG);
  5.  
  6.        // Aqui recojo una instancia del singleton GlobalLogger
  7.        tools::GLog::CGlobalLog *gLog;
  8.        gLog = tools::GLog::CGlobalLog::getInstance();
  9.        gLog->setMinimumLogLevel(tools::GLog::LOGLEVEL_DEGUG);
  10.  
  11.        // Aqui agrego la clase al log para que la llame en processMessage.
  12.        gLog->addListener(&glogger);
  13.        gLog->addMessage("Inicio del Log", "[GLOBAL]",tools::GLog::LOGLEVEL_DEGUG);
  14.  
  15.        //Aqui se llama a la funcion virtual para escribir los mensajes a los listeners.
  16.        gLog->processMessages();
  17.        cout << "Hola mundo" << endl;
  18.        system("PAUSE");
  19.        return EXIT_SUCCESS;
  20. }
  21.  

El del constructor es este:
Código: C++
  1.  
  2. CGeneralLogger::CGeneralLogger(std::string fileName,
  3. tools::GLog::LogLevel lvl):m_fileName(fileName), m_level(lvl)
  4. {
  5.        m_file = new std::ofstream;
  6.        m_file->open(m_fileName.c_str(), std::ios_base::out |std::ios_base::app);
  7.        tools::GLog::CGlobalLog *log;
  8.        log = tools::GLog::CGlobalLog::getInstance();
  9. }
  10.  
  11.  

Y el del destructor es este:
Código: C++
  1.  
  2. CGeneralLogger::~CGeneralLogger(void)
  3. {
  4.        *m_file << "closing file" << std::endl;
  5.        m_file->close();
  6. }
  7.  
  8.  

Y el codigo en addListener, es este:
Código: C++
  1.  
  2. void CGlobalLog::addListener( IListener* listener, std::string loggerGroup /*= "[GLOBAL]"*/ )
  3.  {
  4.      std::pair<t_ListenerVectorMap::iterator,bool> p =
  5.      listenerVectorMap.insert(std::pair<std::string,t_ListenerVector*>(loggerGroup,new t_ListenerVector()));
  6.      p.first->second->push_back(listener);
  7.  }
  8.  
  9.  

Mis sospechas son que en algun sitio de las STL que uso en addListener
provocan algun tipo de constructor por defecto que lleva a una llamada al
destructor del objeto. Ademas, una vez se acaba el main, tambien se
llama al destructor. Por otro lado, si declaro el destructor como
virtual se produce una tercera llamada al destructor.

La verdad es que ando bastante perdido. Si me podeis echar una mano os
lo agradeceria muchisimo.

4
Visual C++ / C++ En Windows Vista
« en: Domingo 21 de Enero de 2007, 15:17 »
Hola a todos. No se si se habra discutido por aqui (al menos la busqueda no me ha devuelto nada), pero me preguntaba si alguien sabe que pasa windows vista respecto a C++. Parece que Vista va a ser muy orientada a lenguajes CLR, y C++ tambien tiene su interface para .NET, pero yo me refiero a un API parecida al win32 pero para Vista.

Seguiran sirviendo los codigos de Win32? Se han inventado algun otro API?

Gracias

5
Java / Urgente: Problemas Con Sockets
« en: Lunes 27 de Diciembre de 2004, 14:23 »
Hola a todos:
tengo un problema bastante gordo con una practica con la universidad y me he quedado atascado. El problema es hacer un pequeño proxy con sockets. La idea es analizar la direccion mandada desde el navegador, y si esta en una lista negra, no permitir el paso al otro lado del servidor. Si esta permitida dejar pasar la comunicacion. Mi programa ya reconoce las direcciones prohibidas. Tambien consigo manejar varios clientes (mediante threads). El problema gordo lo tengo al intentar hacer el bypass de un socket a otro. Basicamente lo que hago es esperar el socket del servidor

socketCliente= serverSocekt.accept();

//lanzo un thread para analizarlo, si tiene que pasar creo otro socket
socketExterior = new socket(direccion,puerto);
La direccion ya la he conseguido cuando analizaba la direccion del socket.
Mi problema es ahora. Intento llenar un array o alguna estructura de memoria con el contenido del inputStream del socketCliente, para darselo al output del socket exterior. El problema es que no se como asegurar el tamaño del array o que estructura usar para cazar la cabecera del socket.

Habia pensado en usar el PipedinputStream pero no se como hacerlo. Por favor, alguien me puede ayudar? No me queda casi tiempo.

Gracias

Páginas: [1]