MsiRecordReadStream, fonction (msiquery.h)

La fonction MsiRecordReadStream lit les octets d’un champ de flux d’enregistrement dans une mémoire tampon.

Syntaxe

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

Paramètres

[in] hRecord

Handle vers l’enregistrement.

[in] iField

Spécifie le champ de l’enregistrement.

[out] szDataBuf

Mémoire tampon pour recevoir le champ de flux. Vous devez vous assurer que la mémoire tampon de destination est de la même taille ou plus grande que la mémoire tampon source. Consultez la section Notes.

[in, out] pcbDataBuf

Spécifie le nombre de mémoires tampons entrantes et sortantes. En entrée, il s’agit de la taille complète de la mémoire tampon. En sortie, il s’agit du nombre d’octets qui ont été écrits dans la mémoire tampon. Consultez la section Notes.

Valeur retournée

Cette fonction retourne UINT.

Notes

Pour lire un flux, définissez pcbDataBuf sur le nombre d’octets à transférer du flux à la mémoire tampon chaque fois que la fonction est appelée. Au retour, MsiRecordReadStream réinitialise pcbDataBuf au nombre d’octets qui ont été effectivement transférés. Si la mémoire tampon est plus petite que le flux, le flux est repositionné lorsque la mémoire tampon devient saturée, de sorte que les données suivantes du flux sont transférées par l’appel suivant à la fonction. Lorsque plus aucun octet n’est disponible, MsiRecordReadStream retourne ERROR_SUCCESS.

Si vous passez 0 pour szDataBuf , pcbDataBuf est réinitialisé au nombre d’octets restant à lire dans le flux.

L’exemple de code suivant lit à partir d’un flux qui se trouve dans le champ 1 d’un enregistrement spécifié par hRecord et lit l’intégralité du flux de 8 octets à la fois.

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

Consultez également Limitations OLE sur les flux.

Spécifications

   
Client minimal pris en charge Windows Installer 5.0 sur Windows Server 2012, Windows 8, Windows Server 2008 R2 ou Windows 7. Windows Installer 4.0 ou Windows Installer 4.5 sur Windows Server 2008 ou Windows Vista. Windows Installer sur Windows Server 2003 ou Windows XP
Plateforme cible Windows
En-tête msiquery.h
Bibliothèque Msi.lib
DLL Msi.dll

Voir aussi

Fonctions de traitement des enregistrements