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 |