Motivos possíveis para falha de registro de controle OLE

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 140346
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
OLE controles podem ser registrados usando o Visual C++ no menu Ferramentas, do contêiner de teste fornecido com o CDK (Kit de desenvolvimento de controle), ou usando os aplicativos regsvr ou regsvr32 fornecidos com o Visual C++. Em alguns casos, o registro de um controle pode falhar; use neste artigo para ajudar a solucionar o problema.
Mais Informações
Todos os métodos mencionados anteriormente para registrar um controle OLE usam essencialmente a mesma técnica. LoadLibrary() é chamado para carregar o controle na memória, GetProcAddress() é chamado para obter o endereço da função DllRegisterServer() e, em seguida, DllRegisterServer() é chamado para registrar o controle.

Motivos por que o registro de um controle pode falhar

  • Um ou mais necessário DLLs OLE não está no caminho. Instruções para a distribuição controles OLE, bem como uma explicação sobre o que são necessárias para enviar DLLs podem ser encontradas no Shipctrl.wri arquivo localizado no mesmo diretório como o CDK.
  • O controle está carregando uma DLL diferente de DLL OLE, e essa DLL não está no caminho. Quando o controle é carregado na memória, quaisquer DLLs são carregados implicitamente por meio de uma biblioteca de importação também são carregados. Se qualquer uma dessas DLLs não estão no caminho, o controle não será carregado com êxito, para que o registro falha.
  • Uma ou mais DLLs podem ser a versão errada. Se o controle foi criado com uma versão mais recente de uma DLL que a instalada no computador, o controle pode não carregar corretamente, para que o registro falha.
  • Uma versão antiga do Ocd25.lib está sendo vinculada. Se o controle estiver usando as classes de banco de dados MFC, pode haver um problema com a versão do arquivo Ocd25.lib que está sendo vinculada.
  • O controle OLE está localizado em unidade remota um servidor Novell. Nesse caso, os direitos de acesso para o arquivo .ocx podem estar impedindo o controle de carregamento. Certifique-se que os direitos de acesso para o arquivo .ocx estão definidos para o acesso somente leitura, compartilhável, que é a configuração típica para arquivos executáveis.

Solução de problemas técnicas

Se nenhuma das possíveis causas for verdadeira no seu caso, tente as seguintes técnicas.

  1. Com o projeto de controle carregado no Visual C++, defina o executável para a sessão de depuração para o OLE controle contêiner de teste (Tstcon16.exe ou Tstcon32.exe). Quando você inicia o contêiner de teste (sob o depurador), você receberá um aviso de que o contêiner de teste não contém informações de depuração. Ignorar isso e continuar.
  2. A partir do contêiner de teste, tente registrar o controle. Assista a saída de depuração da DLL de controle OLE ou qualquer uma das suas DLLs dependentes. Se você estiver executando o produto de 16 bits, lembre-se executar o DBWIN programa para receber saída de depuração.

    Para obter informações sobre como definir o executável para uma DLL de sessão de depuração, consulte o tópico de Ajuda "Depuração DLLs" nos manuais online do.
Como alternativa, você pode tentar registrar o controle programaticamente. Primeiro, crie um aplicativo MFC AppWizard selecionando aplicativo baseado em diálogo e automação OLE. Habilitar Automação OLE irá inicializar o OLE para que o código para registrar o controle funcionem corretamente. Na classe derivada de CWinApp, você irá encontrar a função InitInstance() com o código inicial da seguinte maneira:
BOOL CTestregApp::InitInstance(){   // Initialize OLE libraries   if (!AfxOleInit())   {      AfxMessageBox(IDP_OLE_INIT_FAILED);      return FALSE;   }				
neste ponto, adicione o seguinte segmento de código, que permitirá que você verifique os códigos de retorno de LoadLibrary(), GetProcAddress() e DllRegisterServer.
#ifdef _WIN32    HINSTANCE hDLL = LoadLibrary("some.ocx");    if(NULL == hDLL)    {        // See Winerror.h for explaination of error code.        DWORD error = GetLastError();        TRACE1("LoadLibrary() Failed with: %i\n", error);        return FALSE;    }    typedef HRESULT (CALLBACK *HCRET)(void);    HCRET lpfnDllRegisterServer;    lpfnDllRegisterServer =            (HCRET)GetProcAddress(hDLL, "DllRegisterServer");    if(NULL == lpfnDllRegisterServer)    {        // See Winerror.h for explaination of error code.        DWORD error = GetLastError();        TRACE1("GetProcAddress() Failed with %i\n", error);        return FALSE;    }    if(FAILED((*lpfnDllRegisterServer)()))    {        TRACE("DLLRegisterServer() Failed");        return FALSE;    }#else // 16-bit    HINSTANCE hDLL = LoadLibrary("regtest.ocx");    if(HINSTANCE_ERROR > hDLL)    {        // See LoadLibrary() help for explaination of error code.        TRACE1("LoadLibrary() Failed with: %i\n", hDLL);        return FALSE;    }    typedef HRESULT (CALLBACK *HCRET)(void);    HCRET lpfnDllRegisterServer;    lpfnDllRegisterServer =            (HCRET)GetProcAddress(hDLL, "DllRegisterServer");    if(NULL == lpfnDllRegisterServer)    {        // See GetProcAddress() help for explaination of error code.        TRACE("GetProcAddress() Failed");        return FALSE;    }    if(FAILED((*lpfnDllRegisterServer)()))    {        TRACE("DLLRegisterServer() Failed");        return FALSE;    }#endif				
kbinf 1.51 1.52 1.52b 2,00 2.10 2,20 2,50 2.51 2.52 3,00 3.10 3.20 4.00

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 140346 - Última Revisão: 12/04/2015 12:29:30 - Revisão: 2.0

Microsoft Visual C++ 1.5 Professional Edition, Microsoft Visual C++ 1.51, Microsoft Visual C++ 1.52 Professional Edition, Microsoft Visual C++ 2.0 Professional Edition, Microsoft Visual C++ 2.1, Microsoft Visual C++ 2.2, Microsoft Visual C++ 4.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbcode kbctrl KB140346 KbMtpt
Comentários