IDataStorage::RepresentAs
Перейти к навигации
Перейти к поиску
return_code_t PLATFORM_NATIVE_CALLING_CONVENTION RepresentAs(DataStorageTypeId type_id, _Deref_out_ void** ppInterface) noexcept;
Осуществляет преобразование в интерфейс, заданный идентификатором.
- Параметры
type_id 32-х битовое целое, принимающее одно из следующих значений идентификаторов интерфейсов. Символическое имя Целочисленное значение Описание DataStorageType 0 Идентификатор интерфейса IDataStorage. ConsequentDataStorageInputType 2 Идентификатор интерфейса IConsequentDataStorageInput. ArbitrarilyAccessedDataStorageInputType 3 Идентификатор интерфейса IArbitrarilyAccessedDataStorageInput. ContiguousDataStorageInputType 4 Идентификатор интерфейса IContiguousDataStorageInput. InMemoryDataStorageInputType 5 Идентификатор интерфейса IInMemoryDataStorageInput. AssociativeDataStorageInputType 6 Идентификатор интерфейса IAssociativeDataStorageInput. ConsequentDataStorageOutputType 0x101 Идентификатор интерфейса IConsequentDataStorageOutput. ArbitrarilyAccessedDataStorageOutputType 0x102 Идентификатор интерфейса IArbitrarilyAccessedDataStorageOutput. ContiguousDataStorageOutputType 0x103 Идентификатор интерфейса IContiguousDataStorageOutput. AssociativeDataStorageOutputType 0x103 Идентификатор интерфейса IAssociativeDataStorageOutput. ConsequentDataStorageType 0x201 Идентификатор интерфейса IConsequentDataStorage. ArbitrarilyAccessedDataStorageType 0x202 Идентификатор интерфейса IArbitrarilyAccessedDataStorage. ContiguousDataStorageType 0x203 Идентификатор интерфейса IContiguousDataStorage. InMemoryDataStorageType 0x204 Идентификатор интерфейса IInMemoryDataStorage. AssociativeDataStorageType 0x205 Идентификатор интерфейса IAssociativeDataStorage. [out] ppInterface Выходной указатель, принимающий интерфейс заданного типа или 0 в случае ошибки. - Возвращаемое значение:
- 32-битовый целый код ошибки, который в случае успешного выполнения неотрицателен (старший бит сброшен). В случае, если интерфейс, заданный идентификатором, не поддерживается, возвращается код CHSVERROR_INVALID_PARAMETER.
В случае успешного завершения функции, полученный через параметр ppInterface объект необходимо закрывать вызовом его метода Release отдельно и независимо от объекта, над которым применен метод RepresentAs.
Для проверки доступности того или иного интерфейса предпочтительно использовать метод IDataStorage::IsInterfaceAvailable.
Пример
char l_filename[] = "./somefile";
std::size_t cb_filename = sizeof(l_filename) - 1 /*term. 0*/;
IContiguousDataStorage* pIO = nullptr;
IDataStorage* pStorage = nullptr;
return_code_t err = CreateFileAsBinaryDataStorage(l_filename, cb_filename, FileRead | FileWrite, FileCreateAlways, &pStorage);
if (err < 0)
goto cleanup; //failure of CreateFileAsBinaryDataStorage
err = pStorage->IsInterfaceAvailable(ContiguousDataStorageType);
if (err < 0)
goto cleanup; //failure of IsInterfaceAvailable
err = pStorage->RepresentAs(ContiguousDataStorageType, (void**) &pIO);
if (err < 0)
goto cleanup; //failure of RepresentAs
//access the file via pIO...
cleanup:
if (pStorage)
pStrorage->Release();
if (pIO)
pIO->Release();