MsiRecordReadStream-Funktion (msiquery.h)

Die MsiRecordReadStream-Funktion liest Bytes aus einem Datensatzdatenstromfeld in einen Puffer.

Syntax

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

Parameter

[in] hRecord

Handle mit dem Datensatz.

[in] iField

Gibt das Feld des Datensatzes an.

[out] szDataBuf

Ein Puffer, der das Streamfeld empfangen soll. Stellen Sie sicher, dass der Zielpuffer die gleiche Größe oder größer als der Quellpuffer hat. Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.

[in, out] pcbDataBuf

Gibt die Anzahl der Ein- und Auspuffer an. Bei der Eingabe ist dies die vollständige Größe des Puffers. Bei der Ausgabe ist dies die Anzahl der Bytes, die tatsächlich in den Puffer geschrieben wurden. Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.

Rückgabewert

Diese Funktion gibt UINT zurück.

Hinweise

Um einen Stream zu lesen, legen Sie pcbDataBuf auf die Anzahl der Bytes fest, die bei jedem Aufruf der Funktion von Stream zu Puffer übertragen werden sollen. Bei der Rückgabe setzt msiRecordReadStreampcbDataBuf auf die Anzahl der bytes zurück, die tatsächlich übertragen wurden. Wenn der Puffer kleiner als der Datenstrom ist, wird der Stream neu positioniert, wenn der Puffer voll ist, sodass die nächsten Daten im Stream durch den nächsten Aufruf der Funktion übertragen werden. Wenn keine bytes mehr verfügbar sind, gibt MsiRecordReadStream ERROR_SUCCESS zurück.

Wenn Sie 0 für szDataBuf übergeben, wird pcbDataBuf auf die Anzahl der Bytes im Datenstrom zurückgesetzt, die noch gelesen werden sollen.

Das folgende Codebeispiel liest aus einem Stream, der sich in Feld 1 eines durch hRecord angegebenen Datensatzes befindet, und liest den gesamten Datenstrom jeweils 8 Byte.

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

Siehe auch OLE-Einschränkungen für Streams.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Installer 5.0 unter Windows Server 2012, Windows 8, Windows Server 2008 R2 oder Windows 7. Windows Installer 4.0 oder Windows Installer 4.5 unter Windows Server 2008 oder Windows Vista. Windows Installer unter Windows Server 2003 oder Windows XP
Zielplattform Windows
Kopfzeile msiquery.h
Bibliothek Msi.lib
DLL Msi.dll

Weitere Informationen

Datensatzverarbeitungsfunktionen