Posibles razones del error de registro de control OLE

Seleccione idioma Seleccione idioma
Id. de artículo: 140346 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

OLE controles se pueden registrar mediante Visual C++ en el menú Herramientas, desde el contenedor de prueba proporcionada con el Kit de desarrollo de control (CDK), o utilizando las aplicaciones de regsvr o regsvr32 proporcionadas con Visual C++. En algunos casos, puede fallar el registro de un control; utilice en este artículo para ayudar a solucionar el problema.

Más información

Todos los métodos mencionados anteriormente para registrar un control OLE utilizan básicamente la misma técnica. Se llama a LoadLibrary() para cargar el control en la memoria, se llama a GetProcAddress() para obtener la dirección de la función DllRegisterServer() y se llama a DllRegisterServer() para registrar el control.

Motivos de por qué puede fallar el registro de un control

  • Uno o más de las DLL OLE necesario no está en la ruta de acceso. Pueden encontrar instrucciones para distribuir controles OLE, así como una explicación de qué archivos DLL son necesarias para enviar en el Shipctrl.wri archivo ubicado en el mismo directorio que el CDK.
  • El control es cargar una DLL distinta de la DLL de OLE, y esa DLL no está en la ruta de acceso. También se cargan cuando el control se carga en memoria, cualquier DLL que implícitamente se cargan a través de una biblioteca de importación. Si cualquiera de estos archivos DLL no están en la ruta de acceso, el control no está cargado correctamente, por lo que produce un error de registro.
  • Una o más DLLs sea la versión incorrecta. Si el control se creó con una versión más reciente de un archivo DLL que la instalada en el equipo, el control no se carga correctamente, por lo que produce un error de registro.
  • Una versión antigua de Ocd25.lib que está vinculada. Si el control utiliza las clases de base de datos MFC, puede haber un problema con la versión del archivo Ocd25.lib que se vincula a.
  • El control OLE se encuentra en unidad remota un servidor Novell. En este caso, los derechos de acceso del archivo .ocx pueden impedir que el control de carga. Asegúrese de que los derechos de acceso para el archivo .ocx se establecido al acceso de sólo lectura, puede compartir, que es la configuración típica para archivos ejecutables.

Técnicas de solución de problemas

Si ninguna de las causas posibles son true en su caso, intente las siguientes técnicas.

  1. Con el proyecto de control cargado en C++, establecer el archivo ejecutable para la sesión de depuración para el OLE Control Test Container (Tstcon16.exe o tstcon32.exe). Cuando inicie el Test Container (bajo el depurador), obtendrá una advertencia que el contenedor de prueba no contiene información de depuración. Omitir esto y continuar.
  2. Desde el contenedor de prueba, intente registrar el control. Inspeccionar el resultado de depuración de la DLL de control OLE o cualquiera de sus DLL dependiente. Si está ejecutando el producto de 16 bits, no olvide ejecutar el DBWIN programa reciba resultados de depuración.

    Para obtener información sobre cómo establecer el archivo ejecutable para un archivo DLL de sesión de depuración, consulte el tema de Ayuda "Depuración DLLs" en los libros en pantalla.
Como alternativa, puede intentar registrar el control mediante programación. Cree primero una aplicación de MFC AppWizard Seleccionar aplicación basada en el diálogo y automatización. Habilitar automatización OLE se inicializará OLE para que el código para registrar el control funcione correctamente. En la clase derivada de CWinApp, podrá encontrar la función InitInstance() con el código inicial como sigue:
BOOL CTestregApp::InitInstance()
{

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
   }
				
en este momento, agregue el siguiente segmento de código, que permite comprobar los códigos de retorno de LoadLibrary(), GetProcAddress() y 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
				

Propiedades

Id. de artículo: 140346 - Última revisión: lunes, 01 de diciembre de 2003 - Versión: 2.0
La información de este artículo se refiere a:
  • 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
Palabras clave: 
kbmt kbcode kbctrl KB140346 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 140346
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com