Condividi tramite


Funzione MsiRecordReadStream (msiquery.h)

La funzione MsiRecordReadStream legge byte da un campo del flusso di record in un buffer.

Sintassi

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

Parametri

[in] hRecord

Gestire il record.

[in] iField

Specifica il campo del record.

[out] szDataBuf

Buffer per ricevere il campo di flusso. È necessario assicurarsi che il buffer di destinazione sia la stessa dimensione o maggiore del buffer di origine. Vedere la sezione relativa alle osservazioni.

[in, out] pcbDataBuf

Specifica il numero di buffer in e out. In input, questa è la dimensione completa del buffer. Nell'output si tratta del numero di byte effettivamente scritti nel buffer. Vedere la sezione relativa alle osservazioni.

Valore restituito

Questa funzione restituisce UINT.

Commenti

Per leggere un flusso, impostare pcbDataBuf sul numero di byte da trasferire dal flusso al buffer ogni volta che viene chiamata la funzione. Al ritorno, msiRecordReadStream reimposta pcbDataBuf al numero di byte effettivamente trasferiti. Se il buffer è minore del flusso, il flusso viene riposizionato quando il buffer diventa pieno in modo che i dati successivi nel flusso vengano trasferiti dalla chiamata successiva alla funzione. Quando non sono disponibili più byte, MsiRecordReadStream restituisce ERROR_SUCCESS.

Se si passa 0 per szDataBuf , pcbDataBuf viene reimpostato sul numero di byte nel flusso rimanente da leggere.

L'esempio di codice seguente legge da un flusso che si trova nel campo 1 di un record specificato da hRecord e legge l'intero flusso 8 byte alla volta.

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

Vedere anche limitazioni OLE nei flussi.

Requisiti

   
Client minimo supportato Windows Installer 5.0 in Windows Server 2012, Windows 8, Windows Server 2008 R2 o Windows 7. Windows Installer 4.0 o Windows Installer 4.5 in Windows Server 2008 o Windows Vista. Windows Installer in Windows Server 2003 o Windows XP
Piattaforma di destinazione Windows
Intestazione msiquery.h
Libreria Msi.lib
DLL Msi.dll

Vedi anche

Funzioni di elaborazione dei record