VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "cStrings" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = False Option Explicit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Objeto responsável por tratar strings e realizar conversões ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Guarda o nome do objeto Private Const ST_MY_NAME As String = "cStrings" ' Caracteres de uma quebra de linha Private Const BT_NEW_LINE_CHAR1 As Byte = 13 Private Const BT_NEW_LINE_CHAR2 As Byte = 10 ' Posição final de conversão HTML Private Const IT_HTML_CONV_SIZE As Integer = 8 ' Posição final da conversão de TAG HTML Private Const IT_HTML_TAG_CONV_SIZE As Integer = 107 ' Início & final de conversão TAG Private Const ST_INIT_HTML_TAG As String = "&" Private Const ST_END_HTML_TAG As String = ";" Private Const LN_MAX_HTML_TAG_SIZE As Long = 6 ' Inicio de caracter especial Private Const CH_SPECIAL_CHAR As String = "%" Private Const CH_SPACE_CHAR As String = "+" ' Tamanho do chars de indicação de unicode Private Const LN_TXT_UNICODE As Long = 2 ' Unicode em TXT Private Const ST_TXT_UNICODE As String = "ÿþ" ' Unicode em TXT (quando sistema não suporta unicode muito bem) Private Const ST_TXT_UNICODE2 As String = "??" ' Tipo conversão de texto Private Type CHAR_CONV stSearch As String stReplace As String End Type ' Guarda conversões HTML Private vthcConv() As CHAR_CONV Private blVtConvLoaded As Boolean ' Guarda conversões TAG HTML Private vthcTagConv() As CHAR_CONV Private itTagConvPos As Integer Private blVtTagConvLoaded As Boolean ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Inicia a classe ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Class_Initialize() ' End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte HTML para Texto ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Sub htmlTOtext(stInput As String) ' Converte códigos HTML convHTML stInput ' Converte tags HTML convTagHTML stInput End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte HTML para texto ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub convHTML(stInput As String) Dim itI As Integer ' Verifica se o vetor ainda não foi preenchido If Not blVtConvLoaded Then ' Redimenciona ReDim vthcConv(IT_HTML_CONV_SIZE) ' Preenche dados vthcConv(0).stSearch = Chr(13) vthcConv(1).stSearch = Chr(10) vthcConv(2).stSearch = "

" vthcConv(3).stSearch = "
" vthcConv(4).stSearch = "
" vthcConv(5).stSearch = "
" vthcConv(6).stSearch = ST_SEP + ST_SEP vthcConv(7).stSearch = ST_SEP + ST_LINESEP vthcConv(8).stSearch = ST_LINESEP + ST_SEP vthcConv(0).stReplace = ST_INVALID_VALUE vthcConv(1).stReplace = ST_INVALID_VALUE vthcConv(2).stReplace = ST_LINESEP + ST_LINESEP vthcConv(3).stReplace = ST_LINESEP vthcConv(4).stReplace = ST_LINESEP vthcConv(5).stReplace = ST_LINESEP vthcConv(6).stReplace = ST_SEP vthcConv(7).stReplace = ST_LINESEP vthcConv(8).stReplace = ST_LINESEP ' Seta que foi carregado blVtConvLoaded = True End If ' Varre vetor de conversões For itI = 0 To IT_HTML_CONV_SIZE ' Verifica se encontra While InStr(1, stInput, vthcConv(itI).stSearch) ' Converte stInput = Replace(stInput, vthcConv(itI).stSearch, vthcConv(itI).stReplace) Wend Next itI End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte TAG HTML para texto ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub addTagHTML(stSearch As String, stReplace As String) ' Seta valores vthcTagConv(itTagConvPos).stReplace = stReplace vthcTagConv(itTagConvPos).stSearch = stSearch ' Incrementa contador itTagConvPos = itTagConvPos + 1 End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte TAG HTML para texto ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub convTagHTML(stInput As String) Dim itI As Integer Dim lnAux(1) As Long Dim stAux As String On Error Resume Next ' Verifica se o vetor ainda não foi preenchido If Not blVtTagConvLoaded Then ' Redimenciona vetor ReDim vthcTagConv(IT_HTML_TAG_CONV_SIZE + 1) ' Preenche dados addTagHTML "amp", "&" addTagHTML "gt", ">" addTagHTML "lt", "<" addTagHTML "quot", Chr(34) addTagHTML "acute", "," addTagHTML "cedil", "," addTagHTML "circ", "^" addTagHTML "macr", "¯" addTagHTML "middot", "." addTagHTML "tilde", "~" addTagHTML "uml", "¨" addTagHTML "Aacute", "Á" addTagHTML "aacute", "á" addTagHTML "Acirc", "Â" addTagHTML "acirc", "â" addTagHTML "AElig", "Æ" addTagHTML "aelig", "æ" addTagHTML "Agrave", "À" addTagHTML "agrave", "à" addTagHTML "Aring", "Å" addTagHTML "aring", "å" addTagHTML "Atilde", "Ã" addTagHTML "atilde", "ã" addTagHTML "Auml", "Ä" addTagHTML "auml", "ä" addTagHTML "Ccedil", "Ç" addTagHTML "ccedil", "ç" addTagHTML "Eacute", "É" addTagHTML "eacute", "é" addTagHTML "Ecirc", "Ê" addTagHTML "ecirc", "ê" addTagHTML "Egrave", "È" addTagHTML "egrave", "è" addTagHTML "ETH", "Ð" addTagHTML "eth", "ð" addTagHTML "Euml", "Ë" addTagHTML "euml", "ë" addTagHTML "Iacut", "Í" addTagHTML "iacute", "í" addTagHTML "Icirc", "Î" addTagHTML "icirc", "î" addTagHTML "Igrave", "Ì" addTagHTML "igrave", "ì" addTagHTML "Iuml", "Ï" addTagHTML "iuml", "ï" addTagHTML "Ntilde", "Ñ" addTagHTML "ntilde", "ñ" addTagHTML "Oacute", "Ó" addTagHTML "oacute", "ó" addTagHTML "Ocirc", "Ô" addTagHTML "ocirc", "ô" addTagHTML "OElig", "Œ" addTagHTML "oelig", "œ" addTagHTML "Ograve", "Ò" addTagHTML "ograve", "ò" addTagHTML "Oslash", "Ø" addTagHTML "oslash", "ø" addTagHTML "Otilde", "Õ" addTagHTML "otilde", "õ" addTagHTML "Ouml", "Ö" addTagHTML "ouml", "ö" addTagHTML "Scaron", "Š" addTagHTML "scaron", "š" addTagHTML "szlig", "ß" addTagHTML "THORN", "Þ" addTagHTML "thorn", "þ" addTagHTML "Uacute", "Ú" addTagHTML "uacute", "ú" addTagHTML "Ucirc", "Û" addTagHTML "ucirc", "û" addTagHTML "Ugrave", "Ù" addTagHTML "ugrave", "ù" addTagHTML "Uuml", "Ü" addTagHTML "uuml", "ü" addTagHTML "Yacute", "Ý" addTagHTML "yacute", "ý" addTagHTML "yuml", "ÿ" addTagHTML "Yuml", "Ÿ" addTagHTML "euro", "€" addTagHTML "pound", "£" addTagHTML "yen", "¥" addTagHTML "brvbar", "¦" addTagHTML "copy", "©" addTagHTML "dagger", "†" addTagHTML "Dagger", "‡" addTagHTML "hellip", "..." addTagHTML "iquest", "¿" addTagHTML "lrm", "¿" addTagHTML "mdash", "—" addTagHTML "ndash", "–" addTagHTML "not", "¬" addTagHTML "ordf", "ª" addTagHTML "ordm", "º" addTagHTML "para", "¶" addTagHTML "prime", "'" addTagHTML "Prime", Chr(34) addTagHTML "reg", "®" addTagHTML "rlm", "®" addTagHTML "sup1", "¹" addTagHTML "trade", "™" addTagHTML "rdquo", Chr(34) addTagHTML "ldquo", Chr(34) addTagHTML "times", "×" addTagHTML "and", "^" addTagHTML "micro", "µ" addTagHTML "emsp", " " addTagHTML "ensp", " " addTagHTML "thinsp", " " addTagHTML "??????", "?" ' Seta que foi carregado blVtTagConvLoaded = True End If ' Encontra próximo marcador inicial de TAG lnAux(0) = InStr(1, stInput, ST_INIT_HTML_TAG) ' Enquanto encontrar marcadores iniciais While (lnAux(0) > 0) ' Encontra marcador final lnAux(1) = InStr(lnAux(0), stInput, ST_END_HTML_TAG) ' Verifica se encontrou If (lnAux(1) > 0) Then ' Verifica se é válido If ((lnAux(1) - lnAux(0)) < LN_MAX_HTML_TAG_SIZE) Then ' Pega string stAux = Mid(stInput, lnAux(0) + 1, lnAux(1) - lnAux(0) - 1) ' Verifica se é do tipo numérico If Mid(stAux, 1, 1) = "#" Then ' Pega a parte numérica stAux = Mid(stAux, 2) ' Verifica se é válido If IsNumeric(stAux) Then ' Substitui na string stInput = Mid(stInput, 1, lnAux(0) - 1) + Chr(CLng(stAux)) + Mid(stInput, lnAux(1) + 1) End If Else ' Varre o vetor a procura do código correspondente For itI = 0 To IT_HTML_TAG_CONV_SIZE ' Verifica se é este If (vthcTagConv(itI).stSearch = stAux) Then ' Sai do laço Exit For End If Next itI ' Substitui na string stInput = Mid(stInput, 1, lnAux(0) - 1) + vthcTagConv(itI).stReplace + Mid(stInput, lnAux(1) + 1) End If ' Localiza próximo marcador inicial de TAG lnAux(0) = InStr(lnAux(0), stInput, ST_INIT_HTML_TAG) Else ' Localiza próximo marcador inicial de TAG lnAux(0) = InStr(lnAux(0) + 1, stInput, ST_INIT_HTML_TAG) End If Else ' Decide que não há mais marcadores iniciais lnAux(0) = 0 End If Wend End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte UTF8 para wide-string (antiga convUTF8) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function utf8TOwstring(stInput As String) As String Dim stAux As String Dim lnInPos As Long, lnInSize As Long Dim lnAuxPos As Long Dim lnChPos As Long Dim btChar(2) As Byte Dim itChar As Integer On Error GoTo ErrTreat: ' Define o tamanho da entrada lnInSize = Len(stInput) ' Se entrada for válida If (lnInSize > 0) Then ' Inicia saída stAux = String(lnInSize, 0) ' Inicia variáveis lnInPos = 1 lnAuxPos = 1 ' Enquanto não chegar ao final da string While (lnInPos <= lnInSize) ' Seleciona o char btChar(0) = Asc(Mid(stInput, lnInPos, 1)) ' Verifica o valor Select Case btChar(0) ' Se for ocidental Case 0 To 127 ' Executa operação itChar = btChar(0) ' Incrementa posição lnInPos = lnInPos + 1 ' Se for unicode de nível 2 Case 128 To 223 ' Seleciona próximo char btChar(1) = Asc(Mid(stInput, lnInPos + 1, 1)) ' Se valor for válido If (btChar(1) >= 128) Then ' Executa operação itChar = c_Bitwise.ShiftLeft((btChar(0) And 63), 6) + (btChar(1) And 127) ' Incrementa posição lnInPos = lnInPos + 2 Else ' Define base itChar = btChar(0) ' Incrementa posição lnInPos = lnInPos + 1 End If ' Se for unicode de nível 3 Case Else ' Seleciona próximos chars btChar(1) = Asc(Mid(stInput, lnInPos + 1, 1)) btChar(2) = Asc(Mid(stInput, lnInPos + 2, 1)) ' Se valores forem válidos If (btChar(1) >= 128) And (btChar(2) >= 128) Then ' Executa operação itChar = c_Bitwise.ShiftLeft((btChar(0) And 31), 12) + c_Bitwise.ShiftLeft((btChar(1) And 127), 6) + (btChar(2) And 127) ' Incrementa posição lnInPos = lnInPos + 3 Else ' Define base itChar = btChar(0) ' Incrementa posição lnInPos = lnInPos + 1 End If End Select ' Seta char na saída Mid$(stAux, lnAuxPos) = ChrW(itChar) ' Incrementa posição lnAuxPos = lnAuxPos + 1 Wend ' Retorna auxiliar utf8TOwstring = Mid(stAux, 1, (lnAuxPos - 1)) Else ' Gera saída inválida utf8TOwstring = ST_INVALID_VALUE End If Exit Function ErrTreat: ' Se houver algo no auxiliar If (lnAuxPos > 0) Then ' Retorna auxiliar utf8TOwstring = Mid(stAux, 1, (lnAuxPos - 1)) End If ' Gera erro LogErrMessage Err.Description, ST_MY_NAME + ".utf8TOwstring" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte uma wide-string em utf8 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function wstringTOutf8(stInput As String) As String Dim stAux As String Dim lnPos As Long Dim lnSize As Long Dim lnI As Long Dim itChar As Integer On Error GoTo ErrTreat: ' Recupera tamanho da entrada lnSize = Len(stInput) ' Verifica tamanho de entrada If (lnSize > 0) Then ' Inicia valores lnPos = 1 ' Cria buff stAux = String(lnSize * 3, 0) ' Varre a entrada For lnI = 1 To lnSize ' Seleciona o caracter itChar = AscW(Mid(stInput, lnI, 1)) ' Verifica qual o caracter Select Case itChar ' Se for simples Case 0 To 127 ' Grava direto Mid$(stAux, lnPos) = Chr(itChar) ' Incrementa posição lnPos = lnPos + 1 ' Se for duplo Case 128 To 2047 ' Grava primeiro Mid$(stAux, lnPos) = Chr(192 Or c_Bitwise.ShiftRight(itChar, 6)) ' Incrementa posição lnPos = lnPos + 1 ' Grava segundo Mid$(stAux, lnPos) = Chr(128 Or (itChar And 63)) ' Incrementa posição lnPos = lnPos + 1 ' Se for triplo Case Else ' Grava primeiro Mid$(stAux, lnPos) = Chr(224 Or c_Bitwise.ShiftRight(itChar, 12)) ' Incrementa posição lnPos = lnPos + 1 ' Grava segundo Mid$(stAux, lnPos) = Chr(128 Or (c_Bitwise.ShiftRight(itChar, 6) And 63)) ' Incrementa posição lnPos = lnPos + 1 ' Grava terceiro Mid$(stAux, lnPos) = Chr(128 Or (itChar And 63)) ' Incrementa posição lnPos = lnPos + 1 End Select Next lnI ' Retorna string wstringTOutf8 = Mid(stAux, 1, lnPos - 1) Else ' Retorna inválido wstringTOutf8 = ST_INVALID_VALUE End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".wstringTOutf8" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte uma wide-string em utf8-html ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function wstringTOutf8html(stInput As String) As String Dim stAux As String Dim lnSize As Long On Error GoTo ErrTreat: ' Recupera tamanho da entrada lnSize = Len(stInput) ' Verifica tamanho de entrada If (lnSize > 0) Then ' Transforma wstring em utf8 stAux = wstringTOutf8(stInput) ' Converte para HTML e retorna wstringTOutf8html = stringTOhtml(stAux) Else ' Retorna inválido wstringTOutf8html = ST_INVALID_VALUE End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".wstringTOutf8html" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte uma wide-string em utf8-html (sem caracteres minusculos) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function wstringTOutf8uhtml(stInput As String, lnLimit As Long) As String Dim stAux As String Dim lnSize As Long On Error GoTo ErrTreat: ' Recupera tamanho da entrada lnSize = Len(stInput) ' Verifica tamanho de entrada If (lnSize > 0) Then ' Transforma wstring em utf8 stAux = wstringTOutf8(UCase(stInput)) ' Se for maior que o limite If (Len(stAux) > lnLimit) Then ' Retira excesso stAux = Mid(stAux, 1, lnLimit) End If ' Converte para HTML e retorna wstringTOutf8uhtml = stringTOhtml(stAux) Else ' Retorna inválido wstringTOutf8uhtml = ST_INVALID_VALUE End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".wstringTOutf8uhtml" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte uma string para formato HTML ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function stringTOhtml(stInput As String) As String Dim stAux As String Dim lnPos As Long Dim lnI As Long Dim lnSize As Long Dim btChar As Byte On Error GoTo ErrTreat: ' Recupera o tamanho da entrada lnSize = Len(stInput) ' Verifica tamanho de entrada If (lnSize > 0) Then ' Inicia valores lnPos = 1 ' Cria buff stAux = String(lnSize * 3, 0) ' Varre a entrada For lnI = 1 To lnSize ' Seleciona o caracter btChar = Asc(Mid(stInput, lnI, 1)) ' Verifica qual o caracter Select Case btChar ' Se for espaço Case BT_SEP ' Grava 'plus' Mid$(stAux, lnPos) = CH_SPACE_CHAR ' Incrementa posição lnPos = lnPos + 1 ' Se for caracteres válidos Case 47 To 57, 65 To 90, 97 To 122 ' Grava caracter direto Mid$(stAux, lnPos) = Chr(btChar) ' Incrementa posição lnPos = lnPos + 1 ' Se for outros caracteres Case Else ' Grava em hexadecimal Mid$(stAux, lnPos) = CH_SPECIAL_CHAR + HexTwo(btChar) ' Incrementa posição lnPos = lnPos + 3 End Select Next lnI ' Retorna string stringTOhtml = Mid(stAux, 1, lnPos - 1) Else ' Retorna inválido stringTOhtml = ST_INVALID_VALUE End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".stringTOhtml", stInput End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte um texto-unicode em wide-string ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function txtuniTOwstring(stInput As String) As String Dim stAux As String On Error GoTo ErrTreat: ' Verifica se a entrada é válida If (Len(stInput) > LN_TXT_UNICODE) Then ' Recupera os chars de unicode stAux = Mid(stInput, 1, LN_TXT_UNICODE) ' Verifica se pertence a algum tipo do unicode Select Case stAux ' Se pertence Case ST_TXT_UNICODE, ST_TXT_UNICODE2 ' Converte texto para wide txtuniTOwstring = wcharTOwstring(Mid(stInput, Len(ST_TXT_UNICODE) + 1)) ' Caso não pertencer Case Else ' Apenas retorna entrada txtuniTOwstring = stInput End Select Else ' Apenas retorna entrada txtuniTOwstring = stInput End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".txtuniTowstring" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte um wide-string em texto-unicode ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function wstringTOtxtuni(stInput As String) As String On Error GoTo ErrTreat: ' Verifica se a entrada é válida If (Len(stInput) > 0) Then ' Converte e retorna wstringTOtxtuni = ST_TXT_UNICODE + wstringTOwchar(stInput) Else ' Retorna apenas início de unicode wstringTOtxtuni = ST_TXT_UNICODE End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".wstringTotxtuni" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copia uma wchar para um vetor de inteiros ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function wcharTOvtit(stInput As String) As Integer() Dim lnI As Long Dim vtitAux() As Integer On Error GoTo ErrTreat: ' Se possui uma entrada válida If (Len(stInput) > 1) Then ' Calcula o tamanho do vetor lnI = (Len(stInput) / 2) - 1 ' Redimenciona o vetor ReDim vtitAux(lnI) ' Copia da string para o vetor CopyMemory vtitAux(0), ByVal stInput, Len(stInput) ' Retorna wcharTOvtit = vtitAux End If Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".wcharTovtit" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copia uma vetor de inteiros para um wchar ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function vtitTOwchar(vtitInput() As Integer) As String Dim lnI As Long Dim stAux As String On Error GoTo ErrTreat: ' Inicia variáveis stAux = ST_INVALID_VALUE ' Calcula o tamanho da string lnI = VtSize(vtitInput()) * 2 ' Se possui um tamanho válido If (lnI > 0) Then ' Redimenciona string stAux = String(lnI, 0) ' Copia do vetor para a string CopyMemory ByVal stAux, vtitInput(0), lnI End If ' Retorna vtitTOwchar = stAux Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".vtitTowchar" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte uma wide-char em wide-string ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function wcharTOwstring(stInput As String) As String Dim vtitAux() As Integer Dim lnI As Long Dim stAux As String On Error GoTo ErrTreat: ' Converte a entrada para um vetor de inteiros vtitAux = wcharTOvtit(stInput) ' Recupera tamanho do vetor lnI = VtSize(vtitAux) ' Se houve retorno If (lnI > 0) Then ' Redimenciona string stAux = String(lnI, 0) ' Varre o vetor For lnI = (VtSize(vtitAux) - 1) To 0 Step -1 ' Seta wchar Mid$(stAux, lnI + 1) = ChrW(vtitAux(lnI)) Next lnI ' Retorna string wcharTOwstring = stAux Else ' Retorna inválido wcharTOwstring = ST_INVALID_VALUE End If ' Libera vetor auxiliar Erase vtitAux() Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".wcharTowstring" End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Converte uma wide-string em wide-char ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function wstringTOwchar(stInput As String) As String Dim vtitAux() As Integer Dim lnI As Long Dim stAux As String On Error GoTo ErrTreat: ' Calcula o tamanho do vetor lnI = Len(stInput) ' Se for válido If (lnI > 0) Then ' Redimenciona o vetor de inteiros ReDim vtitAux(lnI - 1) ' Varre a string For lnI = (Len(stInput) - 1) To 0 Step -1 ' Seta os valores do vetor vtitAux(lnI) = AscW(Mid(stInput, lnI + 1, 1)) Next lnI ' Converte em string stAux = vtitTOwchar(vtitAux()) ' Retorna wstringTOwchar = stAux Else ' Retorna inválido wstringTOwchar = ST_INVALID_VALUE End If ' Libera vetor Erase vtitAux() Exit Function ErrTreat: LogErrMessage Err.Description, ST_MY_NAME + ".wstringTowchar" End Function