Red de conocimiento informático - Problemas con los teléfonos móviles - Conversión de cadenas VB y matrices de bytes

Conversión de cadenas VB y matrices de bytes

Al llamar a una función API de Win32 en VB, si el valor de retorno de la función es una cadena, generalmente hay tres situaciones:

1. La función requiere que proporciones una cadena con un espacio fijo por adelantado para almacenar el valor de retorno de la función.

2. La función devuelve una cadena C terminada en nulo en lugar de una cadena VB normal.

3. Las funciones API de Win32 a veces devuelven otro tipo de cadena. Este tipo de cadena contiene múltiples valores de cadena en un solo búfer, cada valor separado por un Nulo y terminado por dos Nulos, uno de los cuales es el terminador del último valor de la cadena y el otro es el Terminador de toda la cadena. En realidad, esta es la matriz de cadenas que normalmente encontramos en C.

El primer caso es bueno, simplemente predefina una cadena con suficiente espacio sin violar el principio y luego asigne el valor de retorno de la función API a la cadena. Por ejemplo, si ya sabe que el valor de retorno de la función no excederá los 256 caracteres, puede codificarlo de la siguiente manera:

DimsAPIReturnas string

SAPIReturn=Space$(256)

SAPIReturn=API_Function( ...)

Para el segundo y tercer caso, es necesario convertir la cadena C devuelta en una cadena VB estándar. La siguiente función CStringToVBString convierte una cadena C terminada en nulo en una cadena VB.

Función públicaCStringToVBString(psCStringAs String)As string

'El parámetro psCString es la cadena C a convertir

'La función devuelve todos los caracteres a la izquierda de Nulo

p>

dimsReturnas cadena

dimiNullCharPosAs Integer

iNullCharPos=InStr(psCString, vbNullChar)

ifiNullCharPos gt;0then

sReturn =left(psCString, iNullCharPos -1)

else

sReturn =pscstring

end if

CStringToVBString= sReturn

Función final

El siguiente procedimiento convierte un búfer que contiene varias cadenas C en una matriz de cadenas.

Public SubMultiCStringToStringArray(psMultiCStringAs String, psaStrings() As String)

'El parámetro psMultiCString son las múltiples cadenas C que se convertirán

'El parámetro psaStrings es la matriz de cadenas VB devuelta, antes de llamar, la matriz debe ser una matriz dinámica vacía

DimiNullPosAs Integer

DimiPrevPosAs Integer

DimiIdxAs Integer

Inicializar matriz de cadenas

iIdx = 0

ReDimpsaStrings(0ToiIdx1)

psaStrings(iIdx1) = ""

Hacer

p>

iNullPos = InStr(iPrevPos1, psMultiCString, vbNullChar)

IfiNullPos gt; iPrevPos1Then

'Asigna la cadena C encontrada a la matriz de cadenas

psaStrings(iIdx) = Mid$(psMultiCString, ( iPrevPos1), ((iNullPos -1) - iPrevPos))

iIdx = iIdx1

ReDim PreservepsaStrings(0ToiIdx)

p>

iPrevPos = iNullPos

Else

'Encontré dos caracteres nulos, elimina el último y sal

ReDim PreservepsaStrings(0ToiIdx -1)

Salir Do

End If

Bucle

End Sub

Utilice estos dos cuando llame a funciones API de Win32 Una función simple que puede eliminar una gran cantidad de código redundante y acelerar el desarrollo.