IBinaryDataBase::RepresentAs

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
 return_code_t RepresentAs(BinaryDataStorageType type_id, void** ppInterface) noexcept;

Осуществляет преобразование в интерфейс, заданный идентификатором.

Параметры
type_id32-х битовое целое, принимающее одно из следующих значений идентификаторов интерфейсов.
Символическое имя Целочисленное значение Интерфейс, соответствующий идентификатору.
BinaryDatabaseType 0 IBinaryDataBase
InputBinaryDataType 1 IInputBinaryData
InputBinaryDataContiguousAccessType 2 IInputBinaryDataContiguousAccess
InMemoryInputBinaryDataType 3 IInMemoryInputBinaryData
OutputBinaryDataType 256 IOutputBinaryData
OutputBinaryDataContiguousAccessType 257 IOutputBinaryDataContiguousAccess
IOBinaryDataType 512 IIOBinaryData
IOBinaryDataContiguousAccessType 513 IIOBinaryDataContiguousAccess
InMemoryIOBinaryDataType 514 IInMemoryIOBinaryData
[out]ppInterfaceВыходной указатель, принимающий интерфейс заданного типа или 0 в случае ошибки.
Возвращаемое значение:
32-битовый целый код ошибки, который в случае успешного выполнения неотрицателен (старший бит сброшен). В случае, если интерфейс, заданный идентификатором, не поддерживается, возвращается код CHSVERROR_INVALID_PARAMETER.

В случае успешного завершения функции, полученный через параметр ppInterface объект необходимо закрывать вызовом его метода Release отдельно и независимо от объекта, над которым применен метод RepresentAs.

Для проверки доступности того или иного интерфейса предпочтительно использовать метод IBinaryDataBase::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();