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 |