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 tempo de compilação ou em tempo de execução. Quando você cria um provedor usando o Assistente da ATL OLE DB para provedor, o assistente cria um registro de usuário padrão tem esta aparência (supondo que você especificou um nome de provedor [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 de OLE DB sobre interações com o cliente. Para obter os dados da coluna necessários para uma resposta, o provedor chama o GetColumnInfo função, que você deve colocar no registro de usuário. Você pode substituir explicitamente GetColumnInfo no registro do usuário, por exemplo, por declará-la no arquivo. h como mostrado aqui:
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Isso é equivalente a:
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Você também deve implementar GetColumnInfo no arquivo. cpp do. registro do usuário
As macros PROVIDER_COLUMN_MAP auxiliam 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 tempo de execução, GetColumnInfo usa o pThis parâmetro para receber um ponteiro para uma instância de comando ou linhas. Comandos e conjuntos de linhas devem oferecer suporte a IColumnsInfo interface, portanto, as informações de coluna podem ser obtidas a partir do ponteiro.
Pkgmkcampo e RowsetClass são o conjunto de linhas que usam o registro de usuário e o comando.
Para obter um exemplo mais detalhado de como substituir GetColumnInfo em um registro de usuário, consulte Dinamicamente determinando colunas retornadas para o consumidor.