 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
rockman2003 Master

Registrado: 27 Ene 2004Mensajes: 202Ubicación: Madrid
|
Publicado: Jue 22 Abr, 2010 10:09 am Asunto: RAD2010 y Windows Server 2003 |
|
|
Hola,
Estoy haciendo las primerar pruebas de instalar el programa que he migrado de Builder 6 a RAD2010, y me funciona bien en WXP, W7, WVista... pero al instalarlo en un W2003 Server me salen cosas muy raras, donde algunos textos me aparecen con caracteres extraños (No se si tendrá que ver con Unicode)
Me estoy volviendo loco con esta migracion
Muchas gracias |
|
| Volver arriba |
|
 |
rockman2003 Master

Registrado: 27 Ene 2004Mensajes: 202Ubicación: Madrid
|
Publicado: Jue 22 Abr, 2010 12:20 pm Asunto: |
|
|
Bueno pues me contesto a mi mismo...
He leido por ahí un mensaje de _Leo donde dice que recomienda deshabilitar la opcion Dynamic RTL Libraries, lo he hecho, y funciona perfectamente.
No entiendo muy bien que diferencia una cosa de la otra, pero la verdad es que me ha funcionado.  |
|
| Volver arriba |
|
 |
rockman2003 Master

Registrado: 27 Ene 2004Mensajes: 202Ubicación: Madrid
|
Publicado: Mar 27 Abr, 2010 12:26 pm Asunto: |
|
|
MENSAJE ELIMINADO POR EL AUTOR
Ultima edición por rockman2003 el Mar 27 Abr, 2010 12:28 pm, editado 1 vez |
|
| Volver arriba |
|
 |
rockman2003 Master

Registrado: 27 Ene 2004Mensajes: 202Ubicación: Madrid
|
Publicado: Mar 27 Abr, 2010 12:26 pm Asunto: |
|
|
Añado al comentario anterior, que aparte de modificar esa opción, me he dado cuenta que el problema no viene de ahí.
Es por las famosas corrupciones de cadenas de texto, al utilizar char *.
He cambiado el codigo, utilizando wchar_t y ahora si que me funciona perfectamente.
Lo que me llama la atención, es que este problema se me ha producido solamente en Windows Server 2003 (Probado en dos ordenadores). |
|
| Volver arriba |
|
 |
rockman2003 Master

Registrado: 27 Ene 2004Mensajes: 202Ubicación: Madrid
|
Publicado: Jue 03 Jun, 2010 3:06 am Asunto: |
|
|
Hola Foro!!
Os planteo una solución a un problema con el Unicode que me estaba matando, y me gustaría ver si alguien me puede explicar porque puede ocurrir esto (Por no perder la cordura más que nada).
Tal y como os planteo en este hilo, compilo un programa con RAD2010, y me funciona correctamente, pero lo copio en otro ordenador (Al final no tiene nada que ver con Windows 2003, ocurre con cualquiera), y me salen caracteres extraños en ciertas operaciones donde se utiliza la funcion t_str().
Por ejemplo:
Yo tengo un STRINGGRID donde coloreo sus filas. A modo de ejemplo, haciendo esto:
| Código: |
void __fastcall Tframe_grid_normal::tablaDrawCell(TObject *Sender,
int ACol, int ARow, const TRect &Rect, Grids::TGridDrawState State)
{
TStringGrid* Grid = dynamic_cast<TStringGrid>(Sender);
Grid->Canvas->Font->Name = "Small Fonts";
Grid->Canvas->Font->Size = 7;
Grid->Canvas->Brush->Color = clInactiveCaption;
Grid->Canvas->FillRect(Rect);
Grid->Canvas->Font->Color = clWhite;
String texto = Grid->Cells[ACol][ARow];
DrawText(Grid->Canvas->Handle, texto.t_str(),
texto.Length(), &Rect, DT_EDITCONTROL | DT_WORDBREAK | DT_VCENTER);
}
|
... se corrompen las cadenas.
Pero si paso un String a wchar_t y de ahí a char *, se soluciona el problema
| Código: |
void __fastcall Tframe_grid_normal::tablaDrawCell(TObject *Sender,
int ACol, int ARow, const TRect &Rect, Grids::TGridDrawState State)
{
TStringGrid* Grid = dynamic_cast<TStringGrid>(Sender);
Grid->Canvas->Font->Name = "Small Fonts";
Grid->Canvas->Font->Size = 7;
Grid->Canvas->Brush->Color = clInactiveCaption;
Grid->Canvas->FillRect(Rect);
Grid->Canvas->Font->Color = clWhite;
String texto = Grid->Cells[ACol][ARow];
wchar_t* wstr = texto.c_str();
char* ascii = new char[wcslen(wstr) + 1];
wcstombs( ascii, wstr, wcslen(wstr) );
DrawText(Grid->Canvas->Handle, ascii,
texto.Length(), &Rect, DT_EDITCONTROL | DT_WORDBREAK | DT_VCENTER);
}
|
¿Tiene sentido esto?[/b] |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 03 Jun, 2010 5:01 am Asunto: |
|
|
Siento no poder ser de mucha ayuda, ya que por curiosidad lo he probado en los siguientes sistemas y no he conseguido que falle (tengo el C++Builder 2010 Pro, con todas las actualizaciones que han salido):
- Windows XP Pro SP3
- Windows Vista Home Basic
- Windows Server 2003 R2
- Windows 7 Pro 64 bits (en este lo he compilado)
(He creado 4 ejecutables para probar, dos en modo Ansi y dos en modo Unicode, debug y release. He usado un TStringGrid y lo he rellenado en el constructor, he usado tu primer código en el evento OnDrawCell, y al ejecutarlo edito las celdas varias veces manualmente)
Si quieres mandarme algún proyecto con el mínimo código posible que te falle y el ejecutable para ver si a mi me falla. Quizás no lo estoy probando igual que tu … |
|
| Volver arriba |
|
 |
rockman2003 Master

Registrado: 27 Ene 2004Mensajes: 202Ubicación: Madrid
|
Publicado: Jue 03 Jun, 2010 9:38 am Asunto: |
|
|
Muchas gracias _Leo por tu apoyo,
Yo estoy sospechando que esto vaya por los siguientes caminos:
1.- No he probado instalar el programa en un ordenador limpio donde no estuvieran las librerias del Builder 6.0 antes.
2.- Algun parametro del .cbproj. Iba a generarlo de cero (Esta generado desde la importación Builder 6.0) pero son tantos los formularios, que me da pereza, si te digo la verdad.
3.- No he probado a compilar el proyecto desde otro sitio (Que esto si que lo haré en breve y te comento)
Pero lo que me esta comiendo las entrañas, no es que ocurra el fallo, es no saber porque lo soluciono con este código. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|