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。

注解

若要读取流,请在每次调用函数时,将 来自 流传输的字节数设置为要从流传输到缓冲区的字节数。 返回时, MsiRecordReadStream 会将 sslDataBuf 重置为实际传输的字节数。 如果缓冲区小于流,则当缓冲区已满时,将重新定位该流,以便下一次调用函数传输流中的下一个数据。 如果没有更多可用字节, MsiRecordReadStream 将返回ERROR_SUCCESS。

如果为 szDataBuf 传递了 0, 则将 ssdDataBuf 重置为剩余要读取的流中的字节数。

下面的代码示例从 hRecord 指定的记录的字段 1 中的流读取,并一次读取整个流 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 Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 Windows Server 2003 或 Windows XP 上的 Windows Installer
目标平台 Windows
标头 msiquery.h
Library Msi.lib
DLL Msi.dll

另请参阅

记录处理函数