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