Razões possíveis para falha de registo de controlo 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
OLE controlos podem ser registados utilizando o Visual C++ no menu Ferramentas, do recipiente fornecido com o controlo Development Kit (CDK), orby, utilizando as aplicações de registar ou regsvr32 fornecidas com o Visual C++. Insome casos, o registo de um controlo pode falhar; Utilize este artigo tohelp resolver o problema.
Mais Informação
Todos os métodos para registar um controlo OLE de useessentially a mesma técnica anteriormente mencionados. LoadLibrary () é chamado ao carregar o controlinto de memória, GetProcAddress () é chamado para obter o endereço da função de theDllRegisterServer() e, em seguida, DllRegisterServer() é chamado toregister o controlo.

Razões por que razão o registo de um controlo pode falhar

  • Um ou mais das necessárias DLLs do OLE não está no caminho. Instruções para a distribuição de controlos OLE, bem como uma explicação sobre o que são necessárias para ser enviado DLLs podem ser encontradas no ficheiro de Shipctrl.wri, localizado no mesmo directório que o CDK.
  • O controlo está a carregar uma DLL que não seja o DLL OLE e esse DLL não está no caminho. Quando o controlo é carregado na memória, quaisquer DLLs que são carregadas implicitamente através de uma biblioteca de importação também são carregadas. Se qualquer uma destas DLLs não estiverem a ser o caminho, o controlo não é carregado com êxito, pelo que a falha de registo.
  • Uma ou mais dll podem ser a versão errada. Se o controlo foi criado com uma versão mais recente de uma DLL que instalado no computador, o controlo poderá não ser carregada correctamente, pelo que a falha de registo.
  • Uma versão antiga do Ocd25.lib está a ser ligada. Se o controlo está a utilizar as classes de base de dados MFC, poderá existir um problema com a versão do ficheiro Ocd25.lib que está a ser ligado.
  • O controlo OLE está localizado na unidade remota num servidor Novell. Neste caso, os direitos de acesso ao ficheiro. ocx poderão estar a impedir o controlo de carregamento. Certifique-se de que os direitos de acesso para o ficheiro. ocx estão definidos para acesso só de leitura, partilhável, o que é a definição típica para ficheiros executáveis.

Técnicas de resolução de problemas

Se nenhum das causas possíveis que se verifiquem no seu caso, tente o followingtechniques.

  1. Com o projecto de controlo carregado no Visual C++, defina o ficheiro executável para a sessão de depuração para OLE controlo recipiente (Tstcon16.exe ou Tstcon32.exe). Quando inicia o contentor de teste (no depurador), obterá um aviso de que o recipiente de ensaio não contém informações de depuração. Ignorar este e continuar.
  2. Do contentor de teste, tente registar o controlo. Assista a saída de depuração da DLL de OLE controlo ou qualquer uma das suas DLLs dependentes. Se estiver a executar o produto de 16 bits, lembre-se executar o programa DBWIN para receber a saída de depuração.

    Para obter informações sobre como definir o ficheiro executável para uma DLL de sessão de depuração, consulte o tópico de ajuda "Depuração DLLs" no Books Online.
Como alternativa, pode tentar registar o controlprogrammatically. Crie primeiro um AppWizard de MFC aplicação baseada em selectingDialog aplicações e automatização OLE. Activar willinitialize de automatização OLE, de modo a que o código para registar o controlo funcione correctamente. A classe derivada de CWinApp, poderá encontrar a função InitInstance (-) com o código inicial do seguinte modo:
BOOL CTestregApp::InitInstance(){   // Initialize OLE libraries   if (!AfxOleInit())   {      AfxMessageBox(IDP_OLE_INIT_FAILED);      return FALSE;   }				
Neste ponto, adicione o segmento de código seguinte, o que permitirá tocheck os códigos de retorno de LoadLibrary (), GetProcAddress (), andDllRegisterServer.
#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.52 2,51 é arredondado 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: 3.0

Microsoft Visual C++ 1.5 Professional Edition, Microsoft Visual C++ 2.0 Professional Edition

  • kbnosurvey kbarchive kbcode kbctrl kbmt KB140346 KbMtpt
Comentários