Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das folgende Codebeispiel zeigt eine Implementierung des IStream-basierten Übertragungsmodells.
MyWiaDriver::drvAcquireItemData(
BYTE *pWiasContext,
LONG lFlags,
PMINIDRV_TRANSFER_CONTEXT pmdtc,
LONG *plDevErrVal)
{
// Check what kind of data transfer is requested.
if (lFlags & WIA_MINIDRV_TRANSFER_DOWNLOAD)
{
// This transfer is a stream-based download.
IWiaMiniDrvTransferCallback *pTransferCallback = NULL;
hr = pmdtc->pIWiaMiniDrvCallBack->QueryInterface(IID_IWiaMiniDrvTransferCallback,
(void**) &pIWiaMiniDrvTransferCallback);
if (SUCCEEDED(hr))
{
IStream *pDestination = NULL;
// Get the destination stream from the client.
hr = pTransferCallback->GetNextStream(0,
bstrItemName,
bstrFullItemName,
&pDestination);
if (hr == S_OK)
{
BYTE *pBuffer = ...
ULONG ulBytesRead = 0;
// Read the next chunk of data into the buffer.
while(GetNextDataBand(pBuffer, &ulBytesRead))
{
// Write the data to the destination stream.
// The driver does not need to know what the
// destination is.
hr = pDestination->Write(...);
if (SUCCEEDED(hr))
{
// Send progress
hr = pTransferCallback->SendMessage(...)
}
else
{
// Take appropriate error action (for example, abort transfer)
}
}
}
}
.
.
.
}
}