Conversión de cadenas VB y matrices de bytes
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) p >
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.