Mogelijke redenen voor OLE-besturingselement Registratiefout

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 140346 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

OLE-kunnen besturingselementen worden geregistreerd met behulp van Visual C++ in het menu Extra uit de Test Container van het besturingselement Development Kit (CDK) of met behulp van de regsvr of regsvr32 toepassingen die met Visual C++. In de registratie van een besturingselement in bepaalde gevallen kan mislukken; in dit artikel te gebruiken het probleem oplossen.

Meer informatie

Alle eerder genoemde methoden voor het registreren van een OLE-besturingselement gebruiken in wezen dezelfde techniek. LoadLibrary() aangeroepen om het besturingselement laden in het geheugen GetProcAddress() wordt aangeroepen om het adres van de De functie DllRegisterServer() en DllRegisterServer() wordt aangeroepen om het besturingselement registreren.

Redenen waarom de registratie van een besturingselement kan niet

  • Een of meer van de benodigde OLE DLL is niet het pad. Instructies voor het distribueren van OLE-besturingselementen, alsmede een uitleg van welke dll's te verzenden kunnen worden gevonden in de Shipctrl.wri bestand in dezelfde map als de CDK.
  • Het besturingselement een DLL-bestand dan de OLE DLL wordt geladen en dat dll niet in het pad. Wanneer het besturingselement wordt geladen in het geheugen van de DLL 's die impliciet worden geladen via een bibliotheek importeren ook worden geladen. Als een van deze DLL's niet in het pad, wordt het besturingselement wordt niet geladen Zo registratie mislukt is.
  • Een of meer DLL's mogelijk de verkeerde versie. Als het besturingselement is opgebouwd. met een nieuwere versie van een DLL-bestand dan op de computer geïnstalleerd het besturingselement mogelijk niet goed geladen zodat de registratie is mislukt.
  • Een oude versie van Ocd25.lib wordt gekoppeld. Als het besturingselement met de MFC-databaseklassen, kan er een probleem met de de versie van het bestand Ocd25.lib wordt gekoppeld.
  • Het OLE-besturingselement bevindt zich op een Novell-server extern station. In deze geval, de toegangsrechten voor de OCX-bestand mag voorkomen de besturingselement laden. Zorg ervoor dat de toegangsrechten voor de ocx. bestand zijn ingesteld op alleen-lezen, deelbaar access is het typische instelling voor uitvoerbare bestanden.

Technieken voor probleemoplossing

Als geen van de mogelijke oorzaken waar in uw geval is, probeert u het volgende technieken.

  1. Stel het uitvoerbare bestand voor de control-project in Visual C++ wordt geladen, de debug-sessie met de OLE-besturingselement Test Container (Tstcon16.exe of Tstcon32.exe). Wanneer u de Container Test start (onder de debugger), krijgt u een waarschuwing dat de Container van de Test niet debug-informatie bevatten. Dit negeren en doorgaan.
  2. Proberen te registreren van het besturingselement uit de Container testen. Let op uitvoer van het besturingselement voor OLE-DLL of een van haar afhankelijke dll's voor foutopsporing. Als u de 16-bits product denken de DBWIN het programma debug uitvoer ontvangen.

    Debug-sessie voor informatie over het instellen van het uitvoerbare bestand voor een DLL Raadpleeg het help-onderwerp 'Foutopsporing dll' Books Online.
Als alternatief kunt u proberen om het besturingselement te registreren via programmering. Maak eerst een AppWizard MFC-toepassing selecteren Op basis van het dialoogvenster toepassings- en OLE-automatisering. OLE-automatisering wordt inschakelen OLE niet initialiseren zodat de code voor het registreren van het besturingselement correct werkt. In de CWinApp afgeleide klasse vindt u de functie InitInstance() met de eerste code als volgt:
BOOL CTestregApp::InitInstance()
{

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
   }
				
Op dit moment het volgende codesegment toevoegen waarmee u Controleer de retourcodes van LoadLibrary(), GetProcAddress(), en 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
				

Eigenschappen

Artikel ID: 140346 - Laatste beoordeling: vrijdag 13 juli 2012 - Wijziging: 5.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
Trefwoorden: 
kbcode kbctrl kbmt KB140346 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 140346
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

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