Uso de tipos de datos genéricos

Si usa tipos de datos genéricos en el código, se puede compilar para Unicode simplemente mediante una directiva de preprocesador para definir "UNICODE" antes de las instrucciones #include para los archivos de encabezado. Para compilar el código para las páginas de códigos de Windows (ANSI), omita la definición "UNICODE". Las nuevas aplicaciones de Windows deben usar Unicode para evitar las incoherencias de páginas de códigos variadas y simplificar la localización.

Para crear código fuente que se pueda compilar para usar caracteres y cadenas Unicode o para usar caracteres y cadenas de páginas de códigos de Windows:

  1. Use tipos de datos genéricos, como TCHAR, LPTSTR y LPTCH, para todos los tipos de caracteres y cadenas usados para el texto. Para obtener más información sobre los tipos genéricos, consulta Tipos de datos de Windows para cadenas.

  2. Asegúrese de que los punteros a búferes de datos que no sean de texto o matrices de bytes binarios estén codificados con tipos de datos como LPBYTE o LPWORD, en lugar del tipo LPTSTR o LPTCH.

  3. Declare punteros de tipo indeterminado explícitamente como punteros void mediante LPVOID según corresponda.

  4. Haga que el puntero sea independiente del tipo aritmético. El uso de unidades de tamaño TCHAR produce variables de 2 bytes si se define UNICODE y 1 byte si no se define UNICODE. El uso de la aritmética de puntero siempre devuelve el número de elementos indicados por el puntero, si los elementos tienen un tamaño de 1 o 2 bytes. La expresión siguiente siempre recupera el número de elementos, independientemente de si se define UNICODE.

    cCount = lpEnd - lpStart;
    

    La expresión siguiente determina el número de bytes usados.

    cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
    

    No es necesario cambiar una instrucción como la siguiente, ya que el incremento de puntero apunta al elemento de carácter siguiente.

    chNext = *++lpText;
    
  5. Reemplace las cadenas literales y las constantes de caracteres de manifiesto por macros. Cambie expresiones como la siguiente.

    while(*lpFileName++ != '\\')
    {
        // ...
    }
    

    Use la macro TEXT como se indica a continuación en esta expresión.

    while(*lpFileName++ != TEXT('\\'))
    {
        // ...
    }
    

    La macro TEXT hace que las cadenas se evalúen como L"string" cuando se define UNICODE y, de lo contrario, como "string". Para facilitar la administración, mueva cadenas literales a recursos, especialmente si contienen caracteres fuera del intervalo ASCII (0x00 a través de 0x7F) o se exponen en la interfaz de usuario. Para admitir la localización de la aplicación para diferentes idiomas nacionales, es muy importante que todas las cadenas de interfaz de usuario estén en recursos localizables.

  6. Use las versiones genéricas de las funciones de Windows. Para obtener más información, vea Convenciones para prototipos de función.

  7. Use las versiones genéricas de las funciones de cadena de biblioteca de C estándar y recuerde definir "_UNICODE" así como "UNICODE", como se describe en Funciones estándar de C.

  8. Si estás adaptando una aplicación escrita originalmente para las páginas de códigos de Windows, recuerda cambiar cualquier código que se base en 255 como el valor más grande de un carácter.

Al compilar código que ha escrito como se ha descrito anteriormente, el compilador puede crear versiones de página de códigos Unicode y Windows de la aplicación desde el mismo origen. En función de las definiciones de UNICODE, las funciones genéricas se resuelven para generar los mismos archivos binarios que si escribe código exclusivamente para Unicode o exclusivamente para páginas de códigos de Windows.

Usar Unicode y juegos de caracteres