Compartir a través de


Función MsiRecordReadStream (msiquery.h)

La función MsiRecordReadStream lee bytes de un campo de secuencia de registros en un búfer.

Sintaxis

UINT MsiRecordReadStream(
  [in]      MSIHANDLE hRecord,
  [in]      UINT      iField,
  [out]     char      *szDataBuf,
  [in, out] LPDWORD   pcbDataBuf
);

Parámetros

[in] hRecord

Identificador del registro.

[in] iField

Especifica el campo del registro.

[out] szDataBuf

Búfer para recibir el campo de flujo. Debe asegurarse de que el búfer de destino tenga el mismo tamaño o mayor que el búfer de origen. Consulte la sección Comentarios.

[in, out] pcbDataBuf

Especifica el número de búferes dentro y fuera. En la entrada, este es el tamaño completo del búfer. En la salida, este es el número de bytes que se escribieron realmente en el búfer. Consulte la sección Comentarios.

Valor devuelto

Esta función devuelve UINT.

Comentarios

Para leer una secuencia, establezca pcbDataBuf en el número de bytes que se van a transferir de la secuencia al búfer cada vez que se llama a la función. Al devolver, MsiRecordReadStream restablece pcbDataBuf al número de bytes que se transfirieron realmente. Si el búfer es menor que el flujo, se cambia la posición de la secuencia cuando el búfer se llena para que la siguiente llamada a la función transfiera los datos siguientes del flujo. Cuando no hay más bytes disponibles, MsiRecordReadStream devuelve ERROR_SUCCESS.

Si pasa 0 para szDataBuf , pcbDataBuf se restablece al número de bytes de la secuencia restante que se va a leer.

El ejemplo de código siguiente lee de una secuencia que se encuentra en el campo 1 de un registro especificado por hRecord y lee toda la secuencia 8 bytes a la vez.

char szBuffer[8];
PMSIHANDLE hRecord;
DWORD cbBuf = sizeof(szBuffer);
do 
{
    if (MsiRecordReadStream(hRecord, 1, szBuffer, 
        &cbBuf) != ERROR_SUCCESS)
        break; /* error */
}
while (cbBuf == 8);  //continue reading the stream while you receive a full buffer
//cbBuf will be less once you reach the end of the stream and cannot fill your 
//buffer with stream data

Consulte también Limitaciones OLE en secuencias.

Requisitos

   
Cliente mínimo compatible Windows Installer 5.0 en Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 en Windows Server 2008 o Windows Vista. Windows Installer en Windows Server 2003 o Windows XP
Plataforma de destino Windows
Encabezado msiquery.h
Library Msi.lib
Archivo DLL Msi.dll

Consulte también

Funciones de procesamiento de registros