Возможные причины сбоя регистрации элементов управления OLE

Переводы статьи Переводы статьи
Код статьи: 140346 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

OLE элементы управления могут быть зарегистрированы с помощью Visual C++, в меню Сервис выберите из предоставленных с управления разработки комплекта (CDK), orby regsvr или regsvr32 приложения, поставляемые с Visual C++ с помощью тестового контейнера. Insome случаев регистрация элемента управления может произойти сбой; Используйте данную статью tohelp устранить неполадку.

Дополнительная информация

Все вышеупомянутые методы регистрации элемента управления OLE useessentially тот же метод. LoadLibrary() вызывается для загрузки памяти controlinto, GetProcAddress() вызывается, чтобы получить адрес функции theDllRegisterServer() и DllRegisterServer() называется toregister управления.

Причин, почему может произойти сбой регистрации элемента управления

  • Один или несколько необходимых OLE библиотеки не в пути. Инструкции для распространения элементов управления OLE, а также объяснение, что библиотеки DLL, необходимые для поставки можно найти в файле Shipctrl.wri, расположенный в том же каталоге, что и пакет CDK.
  • Элемент управления выполняет загрузку DLL Библиотеки OLE и что DLL не в пути. Когда элемент управления загружается в память, также загружаются все библиотеки DLL, которые загружаются неявно через библиотеку импорта. Если любой из этих библиотек DLL не в пути, элемент управления не загружается успешно, чтобы выполнить регистрацию не удалось.
  • Одна или несколько библиотек DLL может быть неправильная версия. Если элемент управления был создан в более поздней версии библиотеки DLL, отличной от установленной на компьютере, элемент управления может не загружаться должным образом, чтобы выполнить регистрацию не удалось.
  • Старая версия Ocd25.lib связана с. Если элемент управления использует классы баз данных MFC, могут быть проблемы с версии файла Ocd25.lib, который связан с.
  • Элемент управления OLE находится на диске, удаленном сервере Novell. В этом случае права доступа к OCX-файл может препятствовать управления загрузки. Убедитесь, что установлены права доступа для OCX-файл для доступа только для чтения, совместного использования, которая обычно устанавливается для исполняемых файлов.

Рекомендации по устранению неполадок

Если ни одна из возможных причин имеют значение true, если в вашем случае, попробуйте followingtechniques.

  1. Проект управления, загруженный в Visual C++ задайте исполняемый файл для сеанса отладки OLE тестовый контейнер элементов управления (Tstcon16.exe или Tstcon32.exe). При запуске тестового контейнера (в отладчике), вы получите предупреждение, что тестовый контейнер не содержит отладочную информацию. Проигнорируйте это и продолжайте работу.
  2. Из тестового контейнера Попытка зарегистрировать элемент управления. Следите за выходные данные отладки DLL элемента управления OLE или любой из его зависимых библиотек DLL. При запуске 16-разрядных продуктов, не забудьте запустить программу DBWIN для получения выходных данных отладки.

    Сведения о задании исполняемого файла для библиотеки DLL сеанс отладки, можно найти в разделе справки «Отладка DLL» в электронной документации.
В качестве альтернативы можно попытаться зарегистрировать controlprogrammatically. Сначала создайте в мастере приложений MFC приложения на основе selectingDialog приложения и OLE-автоматизации. Таким образом, чтобы код, чтобы зарегистрировать элемент управления будет работать правильно при включении willinitialize OLE-автоматизации OLE.В класс, производный от CWinApp вы найдете функцию InitInstance () с исходный код следующим образом:
BOOL CTestregApp::InitInstance()
{

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
   }
				
На этом этапе добавьте следующий фрагмент кода, который позволит вам tocheck коды возврата из 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
				

Свойства

Код статьи: 140346 - Последний отзыв: 9 февраля 2014 г. - Revision: 6.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
Ключевые слова: 
kbcode kbctrl kbmt KB140346 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.
Эта статья на английском языке: 140346
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

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