Foros del Web » Programación para mayores de 30 ;) » C/C++ »

swprintf, en linux y win32 estan definidas diferentes

Estas en el tema de swprintf, en linux y win32 estan definidas diferentes en el foro de C/C++ en Foros del Web. lo que necesito es componer una cadena de texto en una variable para pasarsela a otra funcion que usa wchar_t como parametro de entrada. el ...
  #1 (permalink)  
Antiguo 31/10/2006, 19:25
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
swprintf, en linux y win32 estan definidas diferentes

lo que necesito es componer una cadena de texto en una variable para pasarsela a otra funcion que usa wchar_t como parametro de entrada.

el problema es que en windows con swprintf hago:

TCadena Cadena[100];
swprintf(Cadena, L"Mi cadena compuesta: %d", 2324324);

pero en linux debo hacer:

TCadena Cadena[100];
swprintf(Cadena, 100, L"Mi cadena compuesta: %d", 2324324);

si se fijan en el segundo caso el segundo parametro en un entero que representa el número máximo de caracteres que se copiara en Cadena, pero en windows ese parametro no lo necesito.

mi problema es que quiero que mi código sea multiplataforma y esto me está pillando.

ojala exista alguna solución, aunque pase por usar algunas funciones alternativas.

PD: hasta cuando van a pescar los estandares
PD2: olvide decir que uso kdevelop+gcc en linux y devcpp+mingw en windows
__________________
Blog | Tecnosquad
  #2 (permalink)  
Antiguo 31/10/2006, 19:26
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
perdon aprete mal el boton editar ¬¬
__________________
Blog | Tecnosquad
  #3 (permalink)  
Antiguo 31/10/2006, 21:26
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Intenta usar algunos #defines #ifdef, etc para compilar segun el OS oc cosas asi. checa las directivas del preprocesador, te pueden ayudar mucho.

Saludos
  #4 (permalink)  
Antiguo 31/10/2006, 23:15
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
por ahora mi funcion la he escrito de este modo

Código:
void MostrarInfo()
{
    TCadena CadenaFPS[100];
    TCadena CadenaPoly[100];
    #ifdef WIN32
        swprintf(CadenaFPS, L"CPS: %d", Sistema.RetornarCPS());
        swprintf(CadenaPoly, L"Poligonos: %d", Sistema.RetornarTriangulos() );
    #endif
    
    #ifdef LINUX
        swprintf(CadenaFPS, 100, L"CPS: %d", Sistema.RetornarCPS());
        swprintf(CadenaPoly, 100,L"Poligonos: %d", Sistema.RetornarTriangulos() );
    #endif

    txtFPS.Texto((wchar_t *)CadenaFPS,10,10);
    txtNumPolygonos.Texto((wchar_t *)CadenaPoly,10,20);
}
pero aun pienso que debe haber una manera + elegante de escribir esto, sobre todo pensando que probablemente mi codigo no solo funcione en windows y linux, de hecho estoy usando solo librerias multiplataforma para el resto de cosas
__________________
Blog | Tecnosquad
  #5 (permalink)  
Antiguo 01/11/2006, 01:25
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por ArrauKano Ver Mensaje
por ahora mi funcion la he escrito de este modo

pero aun pienso que debe haber una manera + elegante de escribir esto, sobre todo pensando que probablemente mi codigo no solo funcione en windows y linux, de hecho estoy usando solo librerias multiplataforma para el resto de cosas
Entonces no uses swprintf(). Si _realmente_ la necesitas, haz un #define de esa función, no en medio del código. Pero si sólo fuera esa la función que me estubiese quitando la portabilidad, buscaría otra manera de hacerlo.
  #6 (permalink)  
Antiguo 01/11/2006, 01:40
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
si la definicion es diferente solo en windows tan solo condiciona esa constante.

#ifndef WIN32
//codigo para el resto
#else
//codigo para windows
#endif

o a la inversa, segun prefieras.

Saludos.
  #7 (permalink)  
Antiguo 01/11/2006, 02:13
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Proba a hacer esto para Windows:
#define swprintf _snwprintf

Microsoft soporta el standard en este caso directamente en C++ y en C necesitas esa otra funcion:

http://msdn.microsoft.com/library/de..._.swprintf.asp
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 02/11/2006, 23:35
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
disculpen que no haya leido las respuestas, en breve pruebo sus sugerencias y cuento como va, gracias.
__________________
Blog | Tecnosquad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:46.