OLE denetimi kayıt hatasının olası nedenleri

Makale çevirileri Makale çevirileri
Makale numarası: 140346 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

OLE denetimleri Visual C++ denetim Development Kit'e (CDK ile), sağlanan sınaması kapsayıcısı Araçlar menüsünden'dan veya Visual C++ ile sağlanan uygulamaları regsvr veya regsvr32 kullanarak kaydedilebilir. Bazı durumlarda, bir denetimin kaydı başarısız olabilir; bu makalede, sorun giderme amacıyla kullanın.

Daha fazla bilgi

Tüm bir OLE denetimi kayıt yukarıda açıklanan yöntemleri temelde aynı tekniği kullanın. LoadLibrary() denetimi belleğe yüklemek için denir, GetProcAddress() DllRegisterServer() işlevinin adresini almak için çağrılır ve daha sonra denetimi kaydetmek için DllRegisterServer() çağrılır.

Nedenler neden bir denetimin kaydı başarısız olabilir

  • Bir veya daha fazla gerekli OLE DLL'lerin yolu değil. Dll sevk etmek gerekli bir açıklama yanı sıra OLE denetimleri dağıtmaya yönelik yönergeler Shipctrl.wri bulunabilir CDK aynı dizinde bulunan bir dosya.
  • Denetim bir OLE DLL dışındaki bir DLL yükleniyor ve bu DLL yolu değil. Denetimin belleğe yüklenir, örtülü olarak bir alma kitaplığı aracılığıyla yüklenen tüm dll dosyaları da yüklenir. Birini bu DLL yolu yoksa, denetimi; bu nedenle, kaydı başarısız başarıyla yüklenmedi.
  • Bir veya daha fazla DLL sürümü yanlış olabilir. Denetimi, bir DLL dosyasının yüklü olandan daha yeni bir sürümü ile oluşturuldu, denetimin kaydı başarısız şekilde düzgün yüklenmeyebilir.
  • Eski bir sürümü Ocd25.lib bağlantılı. MFC veritabanı sınıfları denetimi kullanıyorsanız, Ocd25.lib dosyasının bağlı bir sorun olabilir.
  • OLE denetimi Novell sunucunun uzak sürücüde bulunur. Bu durumda, erişim haklarını .ocx dosyası denetimi yüklenmesini engelliyor olabilir. Erişim hakları .ocx dosyası için yürütülebilir dosyaları normal ayarı salt okunur, paylaştırılabilir erişimi ayarladığınızdan emin olun.

Teknikleri sorun giderme

Olası nedenler hiçbiri sizin durumda doğru değilse, aşağıdaki teknikleri deneyin.

  1. Denetim projeyle, Visual C++ ile yüklenen yürütülebilir dosyayı OLE denetimi test kapsayıcısının (Tstcon16.exe veya Tstcon32.exe) hata ayıklama oturumu için ayarlayın. (Altında) hata ayıklayıcısını sınaması kapsayıcısı'ı başlattığınızda, sınaması kapsayıcısı hata ayıklama bilgilerini içeren bir uyarı alırsınız. Bu yoksay ve devam edin.
  2. Sınama kapsayıcıdan denetimi kaydetme girişiminde bulundu. Hata ayıklama çıkışı, bağımlı DLL'lerin birini ya da bir OLE denetim DLL'I izleyin. DBWIN çalıştırmak, 16-bit ürünü çalıştırıyorsanız, anımsamak hata ayıklama çıktısını almak için kullanılan program.

    Hata ayıklama oturumu yürütülebilir bir DLL için ayarlama konusunda bilgi için lütfen Books Online'da "DLL hata ayıklama" Yardım konusuna bakın.
Alternatif olarak, Denetim program aracılığıyla kaydetmeye çalışabilir. Önce iletişim tabanlı uygulama ve OLE Otomasyonu MFC AppWizard uygulama oluşturma. OLE Otomasyonu etkinleştirme OLE denetimi kayıt kodu düzgün çalışması başlatılamıyor. CWinApp türetilmiş sınıf, ilk kod InitInstance() işleviyle aşağıdaki gibi bulabilirsiniz:
BOOL CTestregApp::InitInstance()
{

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
   }
				
LoadLibrary(), GetProcAddress() ve DllRegisterServer döndürülen kodları'nı denetlemek sağlayacak aşağıdaki kod kesimi bu nokta, ekleyin.
#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
				

Özellikler

Makale numarası: 140346 - Last Review: 1 Aralık 2003 Pazartesi - Gözden geçirme: 2.0
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbcode kbctrl KB140346 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:140346
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.

Geri Bildirim Ver

 

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