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

另請參閱

記錄處理函式