Herhangi bir pencere sınıfı uygulanan bir MFC ActiveX denetimi alt sınıfları, COMCTL32.dll tarafından bir Visual Basic 6.0 uygulamasından bir "Sistem hatası ve H80004005" hata iletisi alırsınız

Ö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:223152
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Belirtiler
Bir MFC ActiveX sınıfları penceresini herhangi bir Visual Basic 6.0 .exe durum için aşağıdaki hata Comctl32.dll nedenler tarafından uygulanan o alt sınıfların denetler.
"Sistem hatası ve H80004005 (-2147467259). Belirtilmeyen hata"
ActiveX denetimi hata ayıklama sürümünü bir ASSERT dosya Ctlcore.cpp, sonunda COleControl::CreateControlWindow, açma veya <a1>Satır</a1> 662 yanında neden olur.

Yalnızca Visual Basic 6. 0'dan .exe oluşturmak ve buradan Visual Basic geliştirme ortamı dışında çalıştırıldığında, bu sorun oluşur.
Neden
Microsoft Visual Basic yürütülebilir dosyaları (Comctl32.dll) ortak Denetim Kitaplığı içinde CreateEx kaynaklanan varsayılan olarak, başlatılamıyor değil arama içinde COleControl::CreateControlWindow başarısız. GetLastError() çağırmak için 0x0000057F - verir ortak denetim kitaplığı açıkça başlatılması gereken gösteren pencere sınıfı bulunamadı.
Çözüm
ActiveX denetimi, InitInstance içinde çağrı yapmak:
InitCommonControls(void)
veya
InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls)
bu Comctl32.dll yüklenebilmesi ve denetimi çalıştıran kapsayıcısı ne olursa olsun, başlatıldı sağlar.

Denetim kodu InitCommonControls çağrılıyor yerine, doğrudan Visual Basic istemci uygulamasından da çağırabilirsiniz:
  • Bir genel bildirimi için karşılık gelen form; olun örneğin:
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
  • Çağrı ekle:
    InitCommonControls					
    Form_Load yöntemi.
Bazı durumlarda, bu çok geç ortak denetimler kitaplığı başlatılamıyor olabilir. Bu nedenle, Denetim InitInstance ilgili olarak bu çağrıyı eklemek için önerilir.
Durum
Bu davranış tasarım yüzündendir.
Daha fazla bilgi

Davranışı yeniden oluşturma adımları

  1. Visual C++ MFC ActiveX denetimi Sihirbazı'nı kullanarak oluşturduğunuz bir <a0>Varsayılan</a0> ActiveX denetimi.
  2. Alt sınıfı için pencere sınıfında (adım 2), Visual C++ 6.0 AppWizard AppWizard, <a1>Denetim ayarları</a1> bölümünde aşağıdakilerden birini seçin: msctls_hotkey32, msctls_progress32, msctls_statusbar32, msctls_trackbar32, msctls_updown32, SysAnimate32, SysHeader32, SysListView32, SysTabControl32, veya SysTreeView32.
  3. Denetimi oluşturun.
  4. Microsoft Visual Basic 6. 0'ı açın ve yeni bir standart Exe projesi oluşturun.
  5. Proje menüsünde bileşenleri ' ni tıklatın ve Microsoft Visual C++ kullanarak oluşturduğunuz denetimi seçin.
  6. Bu denetimi seçin ve, formda çizim pencere.
  7. Dosya menüsünden Project.exe yap'ı tıklatın ve exe oluşturun.
  8. Windows Gezgini'ne gidin ve bu yürütülebilir çalıştırın.
MFC VB Comctl32.dll

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 223152 - Son İnceleme: 12/05/2015 13:32:27 - Düzeltme: 3.1

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kberrmsg kbtshoot kbcmnctrls kbctrl kbprb KB223152 KbMttr
Geri bildirim