Enviando o arquivo para o dispositivo
Depois que o arquivo tiver sido transcodificado, se necessário, e todos os metadados incluindo o formato tiverem sido definidos, seu aplicativo poderá enviar o arquivo para o dispositivo. Para fazer isso, primeiro você deve obter uma interface IWMDMStorageControl (ou uma versão posterior) para um local de destino no dispositivo. Os sinalizadores Inserir especificam se o novo armazenamento deve ser um irmão ou filho do destino. Depois de obter o destino, você pode chamar IWMDMStorageControl::Insert, IWMDMStorageControl2::Insert2 ou IWMDMStorageControl3::Insert3 para transferir o arquivo. O aplicativo pode lidar com a leitura dos próprios dados do arquivo implementando IWMDMOperation ou pode permitir que o método Insert leia e transfira o arquivo automaticamente, não fornecendo um ponteiro para uma IWMDMOperation implementada pelo aplicativo.
O código C++ a seguir demonstra como chamar Insert3 para gravar um arquivo em um dispositivo. Se o ponteiro pOperation passado para Insert3 for NULL, o arquivo será enviado em uma etapa; se esse ponteiro for um ponteiro de interface válido, o Windows Media Gerenciador de Dispositivos chamará seu método de retorno de chamada para obter dados em blocos. Para obter detalhes sobre como implementar IWMDMOperation, consulte Manipulando transferências de arquivos manualmente.
// Set the flags for the operation
UINT flags = WMDM_MODE_BLOCK | // Synchronous call.
WMDM_STORAGECONTROL_INSERTINTO | // Insert it into the destination folder.
WMDM_CONTENT_FILE | // We're inserting a file.
WMDM_FILE_CREATE_OVERWRITE; // Overwrite existing files.
if (pOperation != NULL)
flags |= WMDM_CONTENT_OPERATIONINTERFACE;
// Send the file and metadata.
hr = pStgCtl3->Insert3(
flags,
WMDM_FILE_ATTR_FOLDER, // The current storage is a folder.
const_cast<WCHAR*>(pwszFileName), // Source file.
L"My New File.wma",//NULL, // Destination file name.
pOperation, // NULL to allow the SDK to read the file;
// non-NULL to present raw data bytes to the SDK.
pProgress, // Interface to send simple progress notifications.
pMetadata, // IWMDMMetaData interface previously created and filled.
NULL,
&pNewStorage); // Out: handle to the new storage, if the method succeeds.
Tópicos relacionados