msirecordReadStream 函数 (msiquery.h)
MsiRecordReadStream 函数将记录流字段中的字节读取到缓冲区中。
语法
UINT MsiRecordReadStream(
[in] MSIHANDLE hRecord,
[in] UINT iField,
[out] char *szDataBuf,
[in, out] LPDWORD pcbDataBuf
);
parameters
[in] hRecord
记录的句柄。
[in] iField
指定记录的字段。
[out] szDataBuf
用于接收流字段的缓冲区。 应确保目标缓冲区的大小或大于源缓冲区。 请参阅“备注”部分。
[in, out] pcbDataBuf
指定传入和输出缓冲区计数。 输入时,这是缓冲区的完整大小。 输出时,这是实际写入缓冲区的字节数。 请参阅“备注”部分。
返回值
此函数返回 UINT。
注解
若要读取流,请将 bDataBuf 设置为每次调用函数时要从流传输到缓冲区的字节数。 返回时, MsiRecordReadStream 会将 “bdataBuf ”重置为实际传输的字节数。 如果缓冲区小于流,则当缓冲区已满时,将重新定位流,以便通过下一次调用 函数传输流中的下一个数据。 如果没有更多可用字节, MsiRecordReadStream 将返回ERROR_SUCCESS。
如果为 szDataBuf 传递 0,则 将为 流中剩余的要读取的字节数重置为。
下面的代码示例从 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 |