Registro
Quando um usuário deseja inserir um item OLE em um aplicativo, o OLE apresenta uma lista de tipos de objeto dentre os quais escolher. O OLE obtém essa lista do banco de dados de registro do sistema, que contém informações fornecidas por todos os aplicativos de servidor. Quando um servidor se registra, as entradas que ele coloca no banco de dados de registro do sistema (o Registro) descrevem cada tipo de objeto fornecido, extensões de arquivo e o caminho para ele próprio, entre outras informações.
A estrutura e as DLLs (bibliotecas de vínculo dinâmico) do sistema OLE usam esse registro para determinar quais tipos de itens OLE estão disponíveis no sistema. As DLLs do sistema OLE também usam esse registro para determinar como iniciar um aplicativo de servidor quando um objeto vinculado ou inserido é ativado.
Este artigo descreve o que cada aplicativo de servidor precisa fazer quando ele é instalado e cada vez que ele é executado.
Para obter informações detalhadas sobre o banco de dados de registro do sistema e o formato dos arquivos .reg usados para atualizá-lo, confira a Referência do Programador OLE.
Instalação do servidor
Quando você instala seu aplicativo de servidor pela primeira vez, ele deve registrar todos os tipos de itens OLE aos quais ele dá suporte. Você também pode fazer com que o servidor atualize o banco de dados de registro do sistema sempre que ele for executado como um aplicativo autônomo. Isso manterá o banco de dados de registro atualizado se o arquivo executável do servidor for movido.
Observação
Aplicativos MFC gerados pelo assistente de aplicativo registram-se automaticamente quando são executados como aplicativos autônomos.
Se você quiser registrar seu aplicativo durante a instalação, use o programa RegEdit.exe. Se você incluir um programa de instalação com seu aplicativo, faça com que o programa de instalação execute "RegEdit /S appname.reg". (O sinalizador /S indica operação silenciosa, ou seja, ele não exibe a caixa de diálogo relatando a conclusão bem-sucedida do comando.) Caso contrário, instrua o usuário a executar o RegEdit manualmente.
Observação
O arquivo .reg criado pelo assistente de aplicativo não inclui o caminho completo para o executável. Seu programa de instalação precisa modificar o arquivo .reg para incluir o caminho completo para o executável ou modificar a variável de ambiente PATH para incluir o diretório de instalação.
O RegEdit mescla o conteúdo do arquivo de texto .reg no banco de dados de registro. Para verificar o banco de dados ou repará-lo, use o editor do Registro. Tome cuidado para evitar a exclusão de entradas OLE essenciais.
Inicialização do servidor
Quando você cria um aplicativo de servidor com o assistente de aplicativo, o assistente conclui todas as tarefas de inicialização para você automaticamente. Esta seção descreve o que você precisa fazer ao escrever um aplicativo de servidor manualmente.
Quando um aplicativo de servidor é iniciado por um aplicativo de contêiner, as DLLs do sistema OLE adicionam a opção "/Embedding" à linha de comando do servidor. O comportamento de um aplicativo de servidor difere dependendo se ele foi iniciado por um contêiner, portanto, a primeira coisa que um aplicativo deve fazer quando começa a execução é verificar a opção "/Embedding" ou "-Embedding" na linha de comando. Se essa opção existir, carregue um conjunto diferente de recursos que mostram o servidor como totalmente aberto sendo ou ativo in-loco. Para obter mais informações, confira Menus e recursos: adições de servidor.
Seu aplicativo de servidor também deve chamar a respectiva função CWinApp::RunEmbedded
para analisar a linha de comando. Se ele retornar um valor diferente de zero, o aplicativo não deverá mostrar a própria janela porque ele foi executado de um aplicativo de contêiner, não como um aplicativo autônomo. Essa função atualiza a entrada do servidor no banco de dados de registro do sistema e chama a função membro RegisterAll
para você, executando o registro da instância.
Quando o aplicativo do servidor está sendo iniciado, você precisa garantir que ele possa executar o registro da instância. O registro de instância informa às DLLs do sistema OLE que o servidor está ativo e pronto para receber solicitações de contêineres. Ele não adiciona uma entrada ao banco de dados de registro. Execute o registro de instância do servidor chamando a função membro ConnectTemplate
definida por COleTemplateServer
. Isso conecta o objeto CDocTemplate
ao objeto COleTemplateServer
.
A função ConnectTemplate
usa três parâmetros: CLSID do servidor, um ponteiro para o objeto CDocTemplate
e um sinalizador que indica se o servidor dá suporte a várias instâncias. Um minisservidor precisa ser capaz de dar suporte a várias instâncias, ou seja, precisa ser possível que várias instâncias do servidor sejam executadas simultaneamente, uma para cada contêiner. Consequentemente, passe TRUE para esse sinalizador ao iniciar um minisservidor.
Se você estiver escrevendo um minisservidor, por definição, ele sempre será iniciado por um contêiner. Você ainda deve analisar a linha de comando para procurar a opção "/Embedding". A ausência dessa opção na linha de comando significa que o usuário tentou iniciar o minisservidor como um aplicativo autônomo. Se isso ocorrer, registre o servidor com o banco de dados de registro do sistema e, em seguida, exiba uma caixa de mensagem informando ao usuário para iniciar o minisservidor de um aplicativo de contêiner.
Confira também
OLE
Servidores
CWinApp::RunAutomated
CWinApp::RunEmbedded
Classe COleTemplateServer