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.
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.
- 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.
- 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
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
| kbcode kbctrl kbmt KB140346 KbMtnl |
Automatische vertalingBELANGRIJK: 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
(http://support.microsoft.com/kb/140346/en-us/
)
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde productenDit 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.