Registro de usuário
Observação
O assistente de Provedor OLE DB da ATL não está disponível no Visual Studio 2019 e posteriores.
O registro de usuário fornece a estrutura de dados e código que representa os dados da coluna para um conjunto de linhas. Um registro de usuário pode ser criado no tempo de compilação ou tempo de execução. Quando você cria um provedor usando o Assistente de Provedor OLE DB da ATL, o assistente cria um registro de usuário padrão que se parece com isto (supondo que você especificou um nome de provedor [nome curto] como 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 OLE DB tratam de todas as especificações OLE DB em interações com o cliente. Para obter os dados de coluna necessários para uma resposta, o provedor chama a função GetColumnInfo
, que você deve colocar no registro de usuário. Você pode substituir explicitamente GetColumnInfo
no registro de usuário; por exemplo, declarando-o no arquivo .h, como mostrado aqui:
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Isso equivale a:
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Em seguida, implemente GetColumnInfo
no arquivo .cpp do registro de usuário.
As macros PROVIDER_COLUMN_MAP auxiliam na criação de uma função GetColumnInfo
:
BEGIN_PROVIDER_COLUMN_MAP define o protótipo de função e uma matriz estática de estruturas
ATLCOLUMNINFO
.PROVIDER_COLUMN_ENTRY define e inicializa um único
ATLCOLUMNINFO
.END_PROVIDER_COLUMN_MAP fecha a matriz e a função. Ela também coloca a contagem de elementos de matriz no parâmetro pcCols.
Quando um registro de usuário é criado em tempo de execução, GetColumnInfo
usa o parâmetro pThis
para receber um ponteiro para uma instância do conjunto de linhas ou do comando. Os comandos e conjuntos de linhas devem ser compatíveis com a interface IColumnsInfo
para que as informações de coluna possam ser extraídas desse ponteiro.
CommandClass
e RowsetClass
são os comandos e o conjunto de linhas que usam o registro de usuário.
Veja um exemplo mais detalhado de como substituir GetColumnInfo
em um registro de usuário em Determinando dinamicamente as colunas retornadas ao consumidor.