Запись пользователя
Примечание.
Мастер поставщика OLE DB в ATL недоступен в Visual Studio 2019 и более поздних версиях.
Запись пользователя предоставляет структуру кода и данных, представляющую собой данные столбца для набора строк. Запись пользователя может создаваться во время компиляции или выполнения. При создании поставщика с помощью службы Мастер поставщика ATL OLE DB мастер создает запись пользователя по умолчанию, которая выглядит следующим образом (при условии, что указано имя поставщика [короткое имя] из MyProvider).
class CWindowsFile:
public WIN32_FIND_DATA
{
public:
BEGIN_PROVIDER_COLUMN_MAP(CMyProviderWindowsFile)
PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
PROVIDER_COLUMN_ENTRY_STR("FileName", 4, cFileName)
PROVIDER_COLUMN_ENTRY_STR("AltFileName", 5, cAlternateFileName)
END_PROVIDER_COLUMN_MAP()
};
При взаимодействии с клиентом шаблоны поставщика OLE DB обрабатывают все особенности OLE DB. Чтобы получить данные столбца, необходимые для ответа, поставщик вызывает функцию GetColumnInfo
, которую необходимо поместить в запись пользователя. Вы можете использовать явное переопределение GetColumnInfo
в пользовательской записи, например, объявив ее в H-файл, как описано в этом примере.
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Это соответствует следующему.
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Затем запустите GetColumnInfo
в CPP-файле записи пользователя.
Макросы PROVIDER_COLUMN_MAP упрощают создание функции GetColumnInfo
.
BEGIN_PROVIDER_COLUMN_MAP определяет прототип функции и статический массив структур
ATLCOLUMNINFO
.PROVIDER_COLUMN_ENTRY определяет и инициализирует отдельную
ATLCOLUMNINFO
.END_PROVIDER_COLUMN_MAP закрывает массив и функцию. Он также перемещает число элементов массива в параметр pcCols.
При создании записи пользователя во время GetColumnInfo
выполнения использует pThis
параметр для получения указателя на набор строк или экземпляр команд. Команды и наборы строк должны поддерживать интерфейс IColumnsInfo
, поэтому из этого указателя может быть взята информация о столбце.
Команда CommandClass
и набор строк RowsetClass
используют эту запись пользователя.
Более подробный пример переопределения GetColumnInfo
в записи пользователя см. в статье Dynamically Determining Columns Returned to the Consumer (Динамично определяемые столбцы, возвращенные объекту-получателю).