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.
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.
- 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.
- 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