Você deve adicionar uma função de manipulador para o botão executar que você criou no arquivo de recurso de caixa de diálogo.
Para criar um manipulador de botão Run
CTRL e clique duas vezes no botão executar . A função CTestProvDlg::OnRun é exibida em uma janela de origem.Para criar o manipulador, você deve usar as seguintes classes de OLE DB consumidor modelo:
Cada uma dessas classes corresponde a um objeto COM no provedor.
Adicione o código mostrado abaixo. Neste código de manipulador, o objeto CCommand leva uma classe de CProvider como um parâmetro do modelo. Esse parâmetro representa as ligações usadas pelo provedor de acesso aos dados.
///////////////////////////////////////////////////////////////////////
/ / TestProvDlg.cpp
privatevoid CTestProvDlg::OnRun()
{
CCommandlt;CAccessor <CProvider> > da tabela;
CDataSource fonte;
CSession sessão;
se (origem.Open("MyProvider.MyProvider.1", NULL)! = S_OK)
retornar;
se (sessão.Open(Source)! = S_OK)
retornar;
se (tabela.Aberta (sessão, _T("c:\\public\\testprf2\\gloo.txt"))! = S_OK)
retornar;
ao mesmo tempo (tabela.MoveNext() = = S_OK)
{
m_ctlString1.AddString(table.szCommand);
m_ctlString2.AddString(table.szText);
}
}
O manipulador usa três chamadas aberto , mostradas abaixo, que correspondem a três objetos COM no provedor. Ele localiza o provedor usando sua ProgID. Você pode obter o ProgID do registro do sistema ou através do provedor rgs arquivo ( MyProvider.rgs para o provedor simple mostrado na Implementando um provedor de somente leitura simples). O provedor abre um arquivo de texto chamado gloo.txt , que contém um número par de seqüências de caracteres separadas por carro retorna. Aberta passa o caminho do arquivo para o provedor como uma Cadeia de caracteres para o provedor.
se (origem.Open("MyProvider.MyProvider.1", NULL)! = S_OK)
retornar;
se (sessão.Open(Source)! = S_OK)
retornar;
se (tabela.Aberta (sessão, _T("c:\\public\\testprf2\\gloo.txt"))! = S_OK)
Voltar
Para buscar os dados, as chamadas de manipulador table.MoveNext , como mostrado abaixo. Quando há não mais linhas, o provedor retorna DB_S_ENDOFROWSET e encerra o loop. A instrução de Controlarar de loop compara o valor de retorno de S_OK. Se o código usado a macro teve êxito , o loop não iria terminar porque DB_S_ENDOFROWSET é considerado um código de retorno bem-sucedido.
ao mesmo tempo (tabela.MoveNext() = = S_OK)
{
m_ctlString1.AddString(table.szCommand);
m_ctlString2.AddString(table.szText);
}
O consumidor está pronto para testar com o provedor simples (construído em implementar um provedor de somente leitura simples).
O próximo tópico mostra como modificar o consumidor para uso com um Avançado provedor que implementa a interface IRowsetLocate.