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
指定 in 和 out 緩衝區計數。 在輸入時,這是緩衝區的完整大小。 輸出時,這是實際寫入緩衝區的位元組數目。 請參閱<備註>一節。
傳回值
此函式會傳回 UINT。
備註
若要讀取資料流程,請在每次呼叫函式時,將 azureDataBuf 設定為要從資料流程傳輸至緩衝區的位元組數目。 傳回時, MsiRecordReadStream 會將 azureDataBuf 重設為實際傳輸的位元組數目。 如果緩衝區小於資料流程,當緩衝區已滿時,就會重新置放資料流程,讓下一個呼叫函式傳輸資料流程中的下一個資料。 當沒有其他位元組可用時, 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 |
程式庫 | Msi.lib |
Dll | Msi.dll |