O registro de usuário
O registro de usuário fornece a estrutura de código e dados que representa os dados da coluna para um conjunto de linhas.Um registro de usuário pode ser criado em time de compilar ou em time de execução.Quando você cria um provedor usando o ATL provedor OLE DB Wizard, o assistente cria um registro de usuário padrão com a seguinte aparência (supondo que você especificou um nome de provedor de [nome curto] de "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()
};
Os modelos de provedor do OLE DB tratam todas as especificações OLE DB sobre as interações com o cliente.Para obter os dados da coluna necessários para uma resposta, o provedor chama o GetColumnInfo função, que é necessário colocar no registro do usuário. Você pode substituir explicitamente GetColumnInfo no registro do usuário, por exemplo, declarando-o no arquivo .h sistema autônomo mostrado aqui:
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Isso equivale ao:
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Você também deve implementar GetColumnInfo no arquivo de .cpp do registro do usuário.
O auxílio de macros PROVIDER_COLUMN_MAP na criação de um GetColumnInfo função:
BEGIN_PROVIDER_COLUMN_MAP define o protótipo de função e uma matriz estática de ATLCOLUMNINFO estruturas.
PROVIDER_COLUMN_ENTRY define e inicializa um único ATLCOLUMNINFO.
END_PROVIDER_COLUMN_MAP fecha o array e a função.Ele também coloca a contagem de elemento de matriz na pcCols parâmetro.
Quando um registro de usuário é criado em time de execução, GetColumnInfo uses the pThis parâmetro receber um ponteiro para uma instância de comando ou de linhas. Comandos e conjuntos de linhas devem oferecer suporte a IColumnsInfo interface, informações de coluna for podem ser obtidas esse ponteiro.
Pkgmkcampo and RowsetClass são o comando e o conjunto de linhas que usam o registro de usuário.
Para obter um exemplo mais detalhado de como substituir GetColumnInfo em um registro de usuário, ver Dinamicamente colunas determinando retornadas para o consumidor.