Поделиться через


Функция MsiRecordReadStream (msiquery.h)

Функция MsiRecordReadStream считывает байты из поля потока записей в буфер.

Синтаксис

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

Параметры

[in] hRecord

Дескриптор записи.

[in] iField

Указывает поле записи.

[out] szDataBuf

Буфер для получения поля потока. Убедитесь, что целевой буфер имеет тот же размер или больше, чем исходный буфер. См. раздел «Примечания».

[in, out] pcbDataBuf

Указывает количество входных и выходных буферов. На входных данных это полный размер буфера. В выходных данных это число байтов, которые были записаны в буфер. См. раздел «Примечания».

Возвращаемое значение

Эта функция возвращает UINT.

Комментарии

Чтобы прочитать поток, задайте для pcbDataBuf количество байтов, которые будут передаваться из потока в буфер при каждом вызове функции. При возврате MsiRecordReadStream сбрасывает pcbDataBuf до количества фактически переданных байтов. Если буфер меньше потока, поток перемещается при заполнении буфера таким образом, что следующие данные в потоке передаются при следующем вызове функции. Если доступных байтов больше нет, MsiRecordReadStream возвращает ERROR_SUCCESS.

Если передать значение 0 для szDataBuf , pcbDataBuf сбрасывается до количества байтов в потоке, оставшихся для чтения.

Следующий пример кода считывает из потока, который находится в поле 1 записи, указанной параметром hRecord, и считывает весь поток по 8 байт за раз.

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

См. также ограничения OLE для потоков.

Требования

   
Минимальная версия клиента Установщик Windows 5.0 в Windows Server 2012, Windows 8, Windows Server 2008 R2 или Windows 7. Установщик Windows 4.0 или Установщик Windows 4.5 в Windows Server 2008 или Windows Vista. Установщик Windows в Windows Server 2003 или Windows XP
Целевая платформа Windows
Header msiquery.h
Библиотека Msi.lib
DLL Msi.dll

См. также раздел

Функции обработки записей