Možné příčiny selhání registrace ovládacího prvku OLE

Překlady článku Překlady článku
ID článku: 140346 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

OLE ovládacích prvků lze zaregistrovat pomocí aplikace Visual C++ klepněte v nabídce Nástroje, z kontejneru Test s v sadě pro vývoj řízení (CDK) nebo pomocí aplikace služba nebo regsvr32 s Visual C++. V Někdy se pravděpodobně nezdaří registrace ovládacího prvku; použití tohoto článku řešení problému.

Další informace

Použití všech výše uvedených metod pro registrace OLE ovládacího prvku v podstatě stejné techniky. Načtení ovládacího prvku se nazývá LoadLibrary() do paměti, nazývá se nezdařila funkce GetProcAddress() získat adresu Je volána funkce DllRegisterServer() a DllRegisterServer() pro Zaregistrujte ovládací prvek.

Důvody, proč se pravděpodobně nezdaří registrace ovládacího prvku

  • Jeden nebo více knihoven nezbytné OLE DLL není v cestě. Pokyny pro distribuci prvky OLE, jakož i vysvětlení Co jsou knihovny DLL potřebná k dodání, lze nalézt v Shipctrl.wri soubor je umístěn ve stejném adresáři jako CDK.
  • Načítání knihovny DLL kromě knihovny OLE DLL ovládacího prvku a je dané knihovny DLL není v cestě. Pokud ovládací prvek načten do paměti, všechny knihovny DLL implicitně, jsou načteny pomocí import knihovny jsou také načteny. Pokud některý z těchto knihoven DLL není v cestě, ovládací prvek není načten úspěšně takže registrace nezdaří.
  • Jeden nebo více knihoven DLL může být chybná verze. Je-li ovládací prvek byl sestaven. novější verzi knihovny DLL, než je nainstalována v počítači, tak, že se nezdaří registrace nemusí správně načíst ovládací prvek.
  • Starší verze Ocd25.lib připojován. Pokud je ovládací prvek pomocí třídami databází MFC, může být problém se verze souboru Ocd25.lib, která je propojena.
  • Ovládací prvek OLE je umístěn na serveru Novell vzdálené jednotky. V tomto případě přístupová práva k souboru OCX může bránit řízení načítání. Ujistěte se, že přístup práva ocx soubor nastaveny jen pro čtení, sdílet přístup typický nastavení pro spustitelné soubory.

Poradce při potížích s techniky

Pokud žádný z možných příčin platí váš případ, zkuste následující techniky.

  1. Řízení projektu načtený v aplikaci Visual C++ nastavte spustitelné soubory relace ladění OLE ovládací prvek testu kontejneru (Tstcon16.exe nebo Tstcon32.exe). Po spuštění testu kontejneru (pod Debugger), zobrazí varování, že kontejner testu není obsahují informace o ladění. To ignorovat a pokračovat.
  2. Z kontejneru Test pokusí zaregistrovat ovládací prvek. Sledovat ladění výstupu z ovládacího prvku OLE DLL nebo některá z jeho závislých knihoven DLL. Pokud používáte produkt 16 bitů, nezapomeňte spustit DBWIN Zobrazí výstup ladění programu.

    Informace o nastavení spustitelného souboru pro knihovnu DLL ladění relace, Další informace naleznete v tématu nápovědy "Ladění knihoven DLL" v Books Online.
Jako alternativu můžete se pokusit zaregistrovat ovládací prvek programově. Nejprve vytvořit aplikaci MFC AppWizard výběru Aplikace založená na dialogové okno a automatizace OLE. Povolení bude automatizace OLE Inicializace OLE, takže kód, který chcete zaregistrovat ovládací prvek nebude správně fungovat. CWinApp odvozené třídy bude najít funkci InitInstance() Počáteční kódem takto:
BOOL CTestregApp::InitInstance()
{

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
   }
				
V tuto chvíli přidat následujícího segmentu kódu, který vám umožní Kontrola návratových kódů z LoadLibrary() volání GetProcAddress(), a Funkce 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
				

Vlastnosti

ID článku: 140346 - Poslední aktualizace: 23. dubna 2011 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
Klíčová slova: 
kbcode kbctrl kbmt KB140346 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:140346
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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