ASCII-ANSI
(Conversión de caracteres usando funciones API)

Fecha: 27/Dic/02 (25-Dic-02)
Autor: M.Armengot


Código para definir 2 funciones :
ASCIIaANSI(tx0)
y
ANSIaASCII(tx0)
que usan las funciones de la API para dar como resultado
los caracteres (de una cadena de texto arbitrario "tx0") convertidos,
con la 1ª: de ASCII a ANSI, y con la 2ª: de ANSI a ASCII
tomando como base el código escrito originalmente por J.L.Soler
en esta misma sección (sin el que no habría sido tan fácil este diseño).

A continuación sigue el código en Visual Basic:



#If Win32 Then                                  'Declaración de función API para convertir ASCII a ANSI
    Public Declare Function OemToChar Lib "User32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
#Else
    Public Declare Function OemToAnsi Lib "Keyboard" (ByVal lpAnsiStr As String, ByVal lpOemStr As String) As Integer
#End If


#If Win32 Then                                  'Declaración de función API para convertir ANSI a ASCII
    Public Declare Function CharToOem Lib "User32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
#Else
    Public Declare Function AnsiToOem Lib "Keyboard" (ByVal lpAnsiStr As String, ByVal lpOemStr As String) As Integer
#End If

'---------------------------------------------------------------

Function ASCIIaANSI(tx0 As String)
'Función que transforma una cadena tx0 de car ASCII, en otra tx2 de car ANSI
'       usa una llamada a la función del API de Windows: OemToChar(32 bits) ó OemToAnsi(16 bits)
Static tx1 As String                            'se DECLARA para usar en #If: si no se DECLARA, en #If se evalúa como Empty
Static tx2 As String                            'se DECLARA para usar en #If: si no se DECLARA, en #If se evalúa como Empty
tx1 = tx0                                       'Para no "manipular" tx0 DADO
tx2 = Space(Len(tx0))                           'Rellena tx2 con la MISMA long que tx1(por imperativo de la API)

#If Win32 Then
    k = OemToChar(tx1, tx2)                     'k se usa por imperativo de la API (Valor devuelto: 1)
#Else
    Call OemToAnsi(tx1, tx2)                    'En 16 bits no devuelve nada
#End If

ASCIIaANSI = tx2
End Function


Function ANSIaASCII(tx0 As String)
'Función que transforma una cadena tx0 de car ANSI, en otra tx2 de car ASCII
'       usa una llamada a la función del API de Windows: CharToOem(32 bits) ó AnsiToOem(16 bits)
Static tx1 As String                            'se DECLARA para usar en #If: si no se DECLARA, en #If se evalúa como Empty
Static tx2 As String                            'se DECLARA para usar en #If: si no se DECLARA, en #If se evalúa como Empty
tx1 = tx0                                       'Para no "manipular" tx0 DADO
tx2 = Space(Len(tx0))                           'Rellena tx2 con la MISMA long que tx1(por imperativo de la API)

#If Win32 Then
    k = CharToOem(tx1, tx2)                     'k se usa por imperativo de la API (Valor devuelto: 1)
#Else
    Call AnsiToOem(tx1, tx2)                    'En 16 bits no devuelve nada
#End If

ANSIaASCII = tx2
End Function


ir al índice