Kemungkinan alasan untuk OLE kontrol pendaftaran kegagalan

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 140346 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

OLE kontrol dapat didaftarkan dengan menggunakan Visual C++ dari Tools menu, dari wadah tes yang disediakan dengan kontrol Development Kit (CDK), atau dengan menggunakan regsvr atau regsvr32 aplikasi yang disediakan dengan Visual C++. Dalam beberapa kasus, pendaftaran kontrol yang mungkin gagal; menggunakan artikel ini untuk membantu memecahkan masalah.

INFORMASI LEBIH LANJUT

Semua metode yang disebutkan sebelumnya mendaftarkan OLE kontrol menggunakan pada dasarnya teknik yang sama. LoadLibrary() dipanggil untuk memuat kontrol ke memori, GetProcAddress() dipanggil untuk mendapatkan alamat DllRegisterServer() fungsi, dan kemudian DllRegisterServer() dipanggil untuk daftar kontrol.

Alasan mengapa pendaftaran kontrol yang mungkin gagal

  • Satu atau lebih diperlukan OLE dll bukanlah di jalan. Petunjuk untuk mendistribusikan OLE kontrol serta penjelasan dari apa dll diperlukan untuk kapal dapat ditemukan di Shipctrl.wri file yang terletak di direktori yang sama sebagai CDK.
  • Kontrol adalah loading DLL selain OLE DLL, dan adalah bahwa DLL tidak di jalan. Ketika kontrol dimuat ke memori, setiap dll yang secara implisit dibuka melalui perpustakaan impor juga dimuat. Jika salah satu dll ini tidak di jalan, kontrol tidak dimuat berhasil, jadi pendaftaran gagal.
  • Satu atau lebih dll mungkin versi salah. Jika kontrol dibangun dengan versi DLL yang lebih baru daripada yang diinstal di komputer, kontrol mungkin tidak memuat dengan benar, jadi pendaftaran gagal.
  • Versi lama Ocd25.lib terkait dengan. Jika kontrol menggunakan MFC database kelas, mungkin ada masalah dengan Versi dari file Ocd25.lib yang sedang terhubung ke.
  • OLE kontrol terletak pada Novell server drive jauh. Dalam hal ini kasus, hak akses ke .ocx file dapat mencegah kontrol dari loading. Pastikan bahwa hak akses untuk .ocx file ditetapkan untuk read-only, shareable akses, yang khas pengaturan untuk file yang dapat dieksekusi.

Teknik-teknik pemecahan masalah

Jika tidak ada penyebab yang mungkin benar dalam kasus Anda, cobalah berikut teknik.

  1. Dengan proyek kontrol dimuat dalam Visual C++, mengatur executable untuk sesi debug untuk OLE kontrol tes wadah (Tstcon16.exe atau Tstcon32.exe). ketika Anda mulai wadah Test (di bawah debugger), Anda akan mendapatkan peringatan yang wadah tes tidak berisi informasi debug. Abaikan ini dan melanjutkan.
  2. Dari wadah tes, mencoba untuk mendaftar kontrol. Menonton untuk debug yang keluar dari OLE kontrol DLL atau salah satu yang tergantung dll. Jika Anda menjalankan produk 16-bit, ingat untuk menjalankan DBWIN program untuk menerima debug output.

    Untuk informasi tentang cara menetapkan executable untuk DLL debug sesi, Silakan lihat topik bantuan "Debugging dll" dalam buku Online.
Sebagai alternatif, Anda dapat mencoba untuk mendaftar kontrol pemrograman. Pertama membuat MFC AppWizard aplikasi memilih Aplikasi berbasis dialog dan OLE Automation. Memungkinkan OLE Automation akan menginisialisasi OLE sehingga kode untuk mendaftar kontrol akan bekerja dengan baik. Dalam kelas CWinApp yang diturunkan, Anda akan menemukan fungsi InitInstance() dengan awal kode sebagai berikut:
BOOL CTestregApp::InitInstance()
{

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
   }
				
Pada titik ini, tambahkan kode berikut segmen, yang akan memungkinkan Anda untuk memeriksa kode kembali dari LoadLibrary(), GetProcAddress(), dan 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
				

Properti

ID Artikel: 140346 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
Kata kunci: 
kbcode kbctrl kbmt KB140346 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:140346
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.

Berikan Masukan

 

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