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