elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  main para unicode [solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: main para unicode [solucionado]  (Leído 1,801 veces)
kworld

Desconectado Desconectado

Mensajes: 30


Ver Perfil
main para unicode [solucionado]
« en: 1 Junio 2010, 11:40 am »

Hola, por favor ¿me podrían ayudar?

Estoy haciendo una aplicación de consola, y tengo un problema, quiero aceptar nombres unicode de los archivos, por si mi aplicación corre en algún windows en chino o algo así.

El asunto es que el main me da problemas:

Código
  1. #define UNICODE
  2.  
  3. #include <windows.h>
  4. #include <stdio.h>
  5.  
  6. int main(int argc, TCHAR* argv[])
  7. {
  8.  
  9.    if (argc == 2)
  10.    {
  11.       HANDLE archivo;
  12.       int error;
  13.  
  14.       archivo = CreateFile(/*TEXT("texto.txt"),*/ argv[1],
  15.                            GENERIC_READ,
  16.                            FILE_SHARE_READ,
  17.                            NULL, // Descriptor de seguridad por defecto
  18.                            OPEN_EXISTING,
  19.                            FILE_ATTRIBUTE_NORMAL,
  20.                            NULL);
  21.  
  22.       error = GetLastError();
  23.       if (error != NO_ERROR) {
  24.          printf("Error: %d\n", error);
  25.       }
  26.       else
  27.       {
  28.          puts("No error");
  29.       }
  30.    }
  31.    else
  32.    {
  33.        puts("Use only one argument");
  34.    }
  35.  
  36.    return 0;
  37.  
  38. }
  39.  
  40.  

Así como está al especificar el nombre de archivo siempre me da error 2 (ERROR_FILE_NOT_FOUND), en cambio si descomento en el código y utilizo un nombre de archivo fijo existente, en este caso: texto.txt no da error.

A mi parecer el main es el que me da problemas, ¿cómo declaro un main que acepte unicode en la entrada?

He probado usando la cmd.exe en modo unicode:
cmd /u

y al especificar un nombre de archivo existente me da error 123 (ERROR_INVALID_NAME)

Entonces pienso que el problema está en la definición del main.
¿Por favor, alguien me puede ayudar? Tengo todo el resto del código listo para trabajar en unicode, pero me falta el poder aceptar un nombre de archivo desde el main, en este caso argv[1]

Estoy compilando con gcc 3.4.2 (mingw) bajo el ide Dev-C++ 4.9

EI: juntando mensajes.

busqué más información y leí que mingw no acepta wmain, así es que escribí esto como parche basado en: http://msdn.microsoft.com/en-us/library/bb776391%28v=VS.85%29.aspx


Código
  1. #ifdef UNICODE
  2. int main()
  3. #else
  4. int main(int argc, UCHAR* argv[])
  5. #endif
  6. {
  7.    #ifdef UNICODE
  8.    TCHAR** argv;
  9.    int argc;
  10.    argv = CommandLineToArgvW(GetCommandLineW(), &argc);
  11.    if (argv == NULL) {
  12.      return ERROR_DESCONOCIDO;
  13.    }
  14.    #endif
  15.  
  16.    int ret;
  17.    ret = mi_funcion(argv[1]);
  18.  
  19.    #ifdef UNICODE
  20.    LocalFree(argv);
  21.    #endif
  22.  
  23.    return ret;
  24. }
  25.  


« Última modificación: 1 Junio 2010, 18:28 pm por Eternal Idol » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines