Mögliche Gründe für OLE-Steuerelement-Registrierungsfehler

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 140346 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D44061
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
140346 Possible Reasons for OLE Control Registration Failure
Alles erweitern | Alles schließen

Zusammenfassung

OLE-Steuerelemente können über VISUAL C++ im Menü EXTRAS, über den im Steuerelement-Entwicklungskit (Control Development Kit - CDK) enthaltenen Test-Container oder unter Verwendung der mit Visual C++ gelieferten Anwendungen REGSVR oder REGSVR32 registriert werden. In einigen Fällen kann die Registrierung eines Steuerelements fehlschlagen. Verwenden Sie diesen Artikel, um das Problem zu beheben.

Weitere Informationen

Bei allen zuvor genannten Methoden zum Registrieren eines OLE-Steuerelements wird im Wesentlichen das gleiche Verfahren verwendet. LoadLibrary() wird aufgerufen, um das Steuerelement in den Speicher zu laden, GetProcAddress() wird aufgerufen, um die Adresse der Funktion DllRegisterServer() abzurufen, und anschließend wird DllRegisterServer() aufgerufen, um das Steuerelement zu registrieren.

Gründe für das mögliche Fehlschlagen der Registrierung eines Steuerelements
  • Eine oder mehrere der erforderlichen OLE-DLLs sind nicht in dem Pfad enthalten. Eine Anleitung zum Verteilen von OLE-Steuerelementen sowie eine Erklärung, welche DLLs für die Auslieferung erforderlich sind, finden Sie in der Datei "Shipctrl.wir", die sich im gleichen Verzeichnis wie der CDK befindet.
  • Das Steuerelement lädt eine andere DLL als die OLE-DLL, und diese DLL ist nicht in dem Pfad enthalten. Wenn das Steuerelement in den Speicher geladen wird, werden alle DLLs, die implizit über eine Importbibliothek geladen werden, ebenfalls geladen. Wenn eine dieser DLLs nicht in dem Pfad enthalten ist, wird das Steuerelement nicht erfolgreich geladen, sodass die Registrierung fehlschlägt.
  • Eine oder mehrere DLLs weisen möglicherweise die falsche Version auf. Wenn das Steuerelement mit einer neueren Version als der auf dem Computer installierten DLL-Version erstellt wurde, wird das Steuerelement möglicherweise nicht korrekt geladen, sodass die Registrierung fehlschlägt.
  • Es besteht eine Verknüpfung zu einer alten Version von "Ocd25.lib". Wenn das Steuerelement die MFC-Datenbankklassen verwendet, besteht möglicherweise ein Problem mit der Version der verknüpften Datei "Ocd25.lib".
  • Das OLE-Steuerelement befindet sich auf einem Remote-Laufwerk eines Novell-Servers. In diesem Fall verhindern möglicherweise die Zugriffsrechte auf die .ocx-Datei, dass das Steuerelement geladen wird. Stellen Sie sicher, dass die Zugriffsrechte für die .ocx-Datei auf schreibgeschützten, freigabefähigen Zugriff gesetzt sind, die typische Einstellung für ausführbare Dateien.
Fehlerbehandlungsverfahren
Wenn keine der möglichen Ursachen in Ihrem Fall zutrifft, versuchen Sie, nach den folgenden Verfahren vorzugehen.
  1. Wenn das Steuerelementprojekt in Visual C++ geladen ist, setzen Sie die ausführbare Datei für die Debugsitzung auf den Test-Container (Tstcon16.exe oder Tstcon32.exe) für das OLE-Steuerelement. Wenn Sie den Test-Container starten (unter dem Debugger), wird eine Warnmeldung angezeigt, dass der Test-Container keine Debuginformationen enthält. Ignorieren Sie diese Meldung und fahren Sie fort.
  2. Versuchen Sie, das Steuerelement vom Test-Container aus zu registrieren. Achten Sie auf Debugausgaben von der OLE-Steuerelement-DLL oder einer der abhängigen DLLs. Wenn Sie das 16-Bit-Produkt ausführen, denken Sie daran, das Programm DBWIN auszuführen, um eine Debugausgabe zu erhalten.
Informationen zum Setzen einer ausführbaren Datei für eine DLL-Debugsitzung finden Sie unter dem Hilfethema "Debuggen von DLLs" in der Onlinedokumentation.

Als Alternative können Sie versuchen, das Steuerelement programmgesteuert zu registrieren. Erstellen Sie zunächst eine MFC-AppWizard-Anwendung, indem Sie "Dialogbasierte Anwendung" und "OLE-Automation" auswählen. Durch das Aktivieren von "OLE-Automation" wird OLE initialisiert, sodass der Code zum Registrieren des Steuerelements korrekt funktioniert. In der von CWinApp abgeleiteten Klasse finden Sie die Funktion InitInstance() mit dem folgenden ursprünglichen Code:
   BOOL CTestregApp::InitInstance()
   {
// OLE-Bibliotheken initialisieren
      if (!AfxOleInit())
      {
         AfxMessageBox(IDP_OLE_INIT_FAILED);
         return FALSE;
      }
Fügen Sie an diesem Punkt das folgende Codesegment hinzu, das Ihnen ermöglicht, die Rückgabecodes von LoadLibrary(), GetProcAddress() und DllRegisterServer zu überprüfen.
   #ifdef _WIN32
       HINSTANCE hDLL = LoadLibrary("some.ocx");
       if(NULL == hDLL)
       {
           // Erklärung des Fehlercodes siehe "Winerror.h".
           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)
       {
           // Erklärung des Fehlercodes siehe "Winerror.h".
           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)
       {
           // Erklärung des Fehlercodes siehe Hilfe zu LoadLibrary().
           TRACE1("LoadLibrary() Failed with: %i\n", hDLL);
           return FALSE;
       }
typedef HRESULT (CALLBACK *HCRET)(void);
       HCRET lpfnDllRegisterServer;
lpfnDllRegisterServer =
               (HCRET)GetProcAddress(hDLL, "DllRegisterServer");
       if(NULL == lpfnDllRegisterServer)
       {
           // Erklärung des Fehlercodes siehe Hilfe zu GetProcAddress().
           TRACE("GetProcAddress() Failed");
           return FALSE;
       }
if(FAILED((*lpfnDllRegisterServer)()))
       {
           TRACE("DLLRegisterServer() Failed");
           return FALSE;
       }
   #endif
Weitere Suchbegriffe: visual c++ ole-steuerelemente cdk registrieren fehlschlag

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Eigenschaften

Artikel-ID: 140346 - Geändert am: Dienstag, 9. November 2004 - Version: 2.1
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbcode kbtshoot KB140346
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

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