Hata: GlobalMultiUse sınıfı çok iş parçacıklı ortamında Sonlandır Not

Makale çevirileri Makale çevirileri
Makale numarası: 300850 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Iki istemci bir yordamı çağırmak bir ActiveX EXE olan bellekte; bileşen aynı anda ve bu yordamın MultiUse bir sınıf içinde bir ActiveX dinamik bağlantı kitaplığı (DLL) Bu sınıf, bir başka bir ActiveX DLL DOSYASı, ActiveX bileşeni kalır EXE GlobalMultiUse sınıfta bir yordama erişirse, başka bir yordamı çağırır, işlemi, hatta tüm sonlandırmak başarısız, başvuruları yayımlanmıştır.

Bu davranış, Visual Basic 6.0 Service Pack 3 (SP3) veya daha önceki sürümlerde oluşmaz.

Neden

Bu sorun, şu anda başka bir iş parçacığı tarafından çağrılan DllCanUnloadNow işlevi GlobalMultiUse DLL dosyasının YANLıŞ verir nedeniyle oluşur. Bunun anlamı, GlobalMultiUse DLL kendisi bir çok iş parçacıklı ortamda yayımlamayı mümkün olmayabilir.

Çözüm

Microsoft desteklenen bir düzeltme yayımladı, ancak yalnızca bu makalede anlatılan sorunu gidermesi amaçlanmaktadır. Düzeltmeyi yalnızca bu sorunla karşılaşmış olan sistemlere uygulayın.

Not Bu düzeltmeyi edinmek üzere Visual Studio'nun Lisans Sözleşmesi olması gerekir.

Bu sorunu çözmek için, düzeltmeyi edinmek üzere Microsoft Ürün Destek Hizmetleri'ne başvurun. Microsoft Ürün Destek Hizmetleri'nin telefon numaralarının tam listesi ve destek ücretleriyle ilgili bilgi için, aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/contactus/?ws=support
Not Özel durumlarda, Microsoft Destek Uzmanı özel bir güncelleştirmenin sorununuzu çözümleyeceğini belirlerse, destek aramaları için normalde uygulanan ücretler iptal edilebilir. Ek destek sorularına ve söz konusu güncelleştirme için geçerli olmayan sorunlara normal destek ücretleri uygulanır. Bu düzeltmenin İngilizce sürümünde aşağıdaki dosya öznitelikleri veya üstü bulunur:
   Date         Time        Version    Size     File name   
   ---------------------------------------------------------
   29 May 2001  3:32:23 PM  6.0.92.37  1.32 MB  Msvbvm60.dll
				

Durum

Microsoft, Microsoft bir hata olduğunu onaylamıştır bu makalenin başında listelenen ürünlerden.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

DLL ile GlobalMultiUse sınıf oluşturma

  1. Yeni bir proje ActiveX DLL DOSYASı, varsayılan sınıfıyla Class1 oluşturun.
  2. Proje menüsünden Project1 Properties ' i tıklatın. Proje için GMultiUseDll değiştirin ve Tamam ' ı tıklatın.
  3. Özellikler iletişim kutusunda, 6 - GlobalMultiUse Class1 Instancing özelliğini ayarlayın.
  4. Class1'ın kodu modüle aşağıdaki kodu yapıştırın:
    Public Function ClassName() As String
        ClassName = "Class1"
    End Function
    					
  5. Dosya menüsünden projeyi derlemek için GMultiUseDll.dll yap ' ı tıklatın. GMultiUseDll.dll oluşturulur.

DLL ile MultiUse bir sınıf oluşturmak.

  1. Yeni bir proje ActiveX DLL DOSYASı, varsayılan sınıfıyla Class1 oluşturun.
  2. Proje menüsünden Project1 Properties ' i tıklatın. Proje için MultiUseDll değiştirin ve Tamam ' ı tıklatın.
  3. Proje) menüsünde, Başvurular ' ı tıklatın, sonra da <a0>GMultiUseDll.dll</a0> onay kutusunu seçin ve Tamam ' ı tıklatın.
  4. Class1'ın kodu modüle aşağıdaki kodu yapıştırın:
    Public Function GetString() As String
        GetString = ClassName
    End Function
    					
  5. Dosya menüsünden projeyi derlemek için MultiUseDll.dll yap ' ı tıklatın. MultiUseDll.dll oluşturulur.

ActiveX EXE Proje oluşturma

  1. Yeni ActiveX EXE proje varsayılan sınıfıyla Class1 oluşturun.
  2. Proje menüsünden Project1 Properties ' i tıklatın. Proje için TestServer değiştirin ve Tamam ' ı tıklatın.
  3. Proje) menüsünde, Başvurular ' ı tıklatın, sonra da <a0>MultiUseDll.dll</a0> onay kutusunu seçin ve Tamam ' ı tıklatın.
  4. Proje menüsünden TestServer özellikler ' i tıklatın. Genel sekmesinde, 10 iş parçacığı için iş parçacığı havuzu ayarlayın.
  5. Class1'ın kod modülü
    Public Sub DoSomething()
        Dim obj As MultiuseDll.Class1
        Set obj = New MultiuseDll.Class1
        obj.GetString
    End Sub
    					
  6. Dosya menüsünden projeyi derlemek için TextServer.exe yap ' ı tıklatın. TextServer.exe oluşturulur.

Istemci Proje oluşturma

  1. Yeni bir standart exe DOSYASı proje varsayılan formla Form1 oluşturun.
  2. Proje menüsünden Project1 Properties ' i tıklatın. Proje için TestClient değiştirin ve Tamam ' ı tıklatın.
  3. Form1'e, bir etiket (Label1), TextBox (Metin1) ve iki CommandButtons (Command1 ve Command2) ekleyin.
  4. Form1'ın kodu modüle aşağıdaki kodu yapıştırın:
    Dim bStop As Boolean
    
    Private Sub Command1_Click()
        Dim oServer As Object
        Set oServer = CreateObject("TestServer.Class1")
        WaitTRUEinFile Text1.Text
        oServer.DoSomething
        Set oServer = Nothing
        Label1.Caption = "The reference was released"
    End Sub
    
    ' The purpose of this function is to synchronize the call to the
    ' GlobalMultiUse DLL through the file Sync.txt.
    Private Sub WaitTRUEinFile(sFile As String)
        Dim sFlag      As String
        Label1.Caption = "Waiting for 'TRUE' in " & sFile
        Do While bStop = False
            Open sFile For Input As #1
            Line Input #1, sFlag
            Close #1
            
            If UCase(Trim(sFlag)) = "TRUE" Then
                Exit Do
            End If
            DoEvents
        Loop
    End Sub
    
    Private Sub Command2_Click()
        bStop = True
    End Sub
    
    Private Sub Form_Load()
        Text1.Text = "c:\sync.txt"
        Command1.Caption = "Start"
        Command2.Caption = "Stop"
        bStop = False
    End Sub
    
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        bStop = True
    End Sub
    					
  5. Dosya menüsünden projeyi derlemek için TestClient.exe yap ' ı tıklatın. TestClient.exe oluşturulur.

Sınamayı çalıştırın.

  1. Not Defteri'nde açın. "T" harfi birinci konuma ekleyin ve dosyayı c sürücüsünün kökünde Sync.txt kaydedin...
  2. TestClient.exe'nin iki örneği başlatın. Görev Yöneticisi'nde iki TestClient.exe işlemin çalıştığını fark.
  3. Her iki örneği TestClient için Başlat ' ı tıklatın.
  4. Sync.txt açın. Ilk satırda "true" olarak değiştirin ve kaydedin.

    Dosyayı kaydettikten sonra Görev Yöneticisi'nde TestServer.exe işlemi dikkat edin.
  5. Her iki örneği TestClient için <a1>Durdur</a1> seçeneğini tıklatın ve formları kapatın. Hiçbir TestClient.exe çalışan örneklerini olduğuna dikkat edin. Bu noktada TestServer.exe yüklü kalır.
Ilgili sorunlar hakkında ek bilgi için birden çok iş parçacığı için oluşturma Visual Basic'te, Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
241896SORUN: İş parçacığı, Visual Basic 6.0 ActiveX bileşenleri ile ilgili sorunlar

Özellikler

Makale numarası: 300850 - Last Review: 24 Şubat 2014 Pazartesi - Gözden geçirme: 4.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Studio 6.0 Service Pack 4
  • Microsoft Visual Studio 6.0 Service Pack 5
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5
  • Microsoft Visual Basic 6.0 Professional Edition
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbbug kblocalsvr kbpending kbqfe KB300850 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:300850

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